符号链接时 Pbcopy 充当 Pbpaste

符号链接时 Pbcopy 充当 Pbpaste

为了使我的配置在环境之间保持理智,我认为在 MacOS 上执行以下操作是个好主意。

ln -s /usr/bin/pbcopy /usr/local/bin/xclip

但是,我的xclip符号链接的作用并不像pbcopy.相反,由于某种原因,它充当pbpaste.


$ echo hello | /usr/bin/pbcopy

$ echo hello | /usr/bin/pbpaste
hello

$ echo hello | /usr/local/bin/xclip
hello

第三个命令的行为应与第一个命令类似,而不是第二个命令。

有什么想法吗?

答案1

这种情况通常发生在实现多种行为并通过检查调用名称来决定执行哪一种行为的程序中。

该技术用于一些流行的工具,例如busybox在单个二进制文件中提供大多数典型的 Linux/Unix 标准实用程序。

在这种情况下,似乎同一个二进制文件正在实现“复制”和“粘贴”行为,并且默认情况下它的行为类似于“粘贴”(除非被调用的名称完全匹配pbcopy)。

您可以通过创建一个调用而不是符号链接的xclipshell 脚本来轻松解决此问题。pbcopy这大致相当于您目前拥有的:

#!/bin/sh
exec pbcopy "$@"

确保execpbcopy在同一进程中运行,将取代外壳,外壳在执行期间将不再存在。

它将"$@"逐字传递任何参数pbcopy(较旧的 shell 需要类似${1+"$@"}正确处理无参数的东西,但现代 shell 实现的情况并非如此。)这与使用符号链接方法时参数发生的情况相同。

不要忘记使脚本可执行:

$ chmod +x /usr/local/bin/xclip

我不确定 期望的参数是否xclip真的与 解释的参数匹配pbcopy,但我的猜测是它们不应该。如果您想将通常采用的参数转换为由xclip解析的参数pbcopy,则此脚本也是执行此操作的合适位置。

相关内容