将远程命令输出复制到macOS剪贴板Copying Remote Command Output to Your macOS Clipboard
文章介绍了一个实用的macOS终端技巧:使用`pbcopy`命令可将任何标准输入内容复制到剪贴板。例如,在shell中运行命令后,输出可直接粘贴,极大提升了工作效率。作者特别赞赏Apple设备的易用性。
Stefano Marinelli
我经常使用苹果设备,总体而言我很喜欢 macOS,当然比 Windows 更胜一筹。
我发现其中一项功能极其有用:不久前发现的 pbcopy 命令。
pbcopy 可以将从标准输入接收的任何内容复制到剪贴板。例如,当我在 shell 中时,我常使用如下命令:
cat filename.md | pbcopy那时我知道文件内容已在剪贴板上,我可以从容地将其粘贴到任何需要的地方,无需额外步骤。
不过有一个限制:这仅适用于本地操作。当我使用 Mac 并想从 macOS shell 复制内容时,它才有效。
当我通过 ssh 连接到远程服务器(*BSD、Linux、illumos 类系统)时,pbcopy 不可用。更准确地说,即使我在服务器上创建了同名命令,该命令也无法像往常一样直接与我的 Mac 剪贴板通信。
幸运的是,现代终端模拟器提供了一些技巧可用。
大多数 ssh 会话我都用 iTerm2,后来意识到在远程会话中也拥有类似 pbcopy 的功能非常实用后,我编写了一个可在 Linux、BSD 和 illumos 类操作系统上运行的小脚本。
需要注意的是,远程服务器无法“神奇”地访问我的 Mac 剪贴板。因此这个技巧之所以奏效,是因为远程命令打印特殊的终端转义序列,而本地终端模拟器会解析它。
这种序列称为 OSC 52。简而言之,它允许在终端内运行的程序请求终端模拟器将 base64 编码的文本放入本地剪贴板。这意味着支持取决于我使用的本地终端模拟器。
我使用的是支持 OSC 52 的 iTerm2。其他终端模拟器也支持此功能,所以这一思路并非仅限于 iTerm2。然而,Apple 默认的 Terminal.app 似乎不支持 OSC 52,因此我不期望在此特定解决方案下它能正常工作。
实际上:
在远程服务器创建命令之前,需在 iTerm2 中启用一个特定选项:
设置 -> 常规 -> 选择 -> 应用程序在终端中可访问剪贴板
此选项允许在终端内运行的应用程序通过转义序列访问剪贴板。
当然,这涉及安全影响。终端内运行的应用程序,包括通过 ssh 在远程服务器上运行的程序,都可能写入本地剪贴板。对我而言这是可接受的,但值得了解其工作原理。
我需要做的只是创建一个命令,即一个小 sh 脚本。登录到要创建命令的服务器。通常我会创建一个名为 /usr/local/bin/pbcopy 的文件,内容如下:
#!/bin/sh
printf '\033]52;c;%s\a' "$(base64 | tr -d '\n')"然后使其可执行:
chmod a+rx /usr/local/bin/pbcopy此后,我就可以在远程服务器上使用 pbcopy,并将另一个命令管道传输给它:
cat filename.md | pbcopy内容不会出现在远程服务器的剪贴板中,而是出现在我的 Mac 本地剪贴板中,因为 iTerm2 接收到 OSC 52 序列并更新了 macOS 剪贴板。
需要完整排版与评论请前往来源站点阅读。