为了使我的配置在不同环境之间保持正常,我认为在 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
第三个命令的行为应该像第一个命令,而不是第二个命令。
有什么想法吗?
这通常发生在实现多种行为并通过检查调用它们的名称来决定采取哪一种行为的程序中。
这种技术用于一些流行的工具,例如
busybox
在单个二进制文件中提供大多数典型的 Linux/Unix 标准实用程序。在这种情况下,似乎同一个二进制文件同时实现了“复制”和“粘贴”行为,并且默认情况下它的行为类似于“粘贴”(除非调用的名称完全匹配
pbcopy
。)您可以轻松地解决此问题,方法是制作
xclip
一个调用pbcopy
而不是符号链接的 shell 脚本。这大致相当于您目前拥有的:exec
确保将pbcopy
在同一进程中运行,将替换 shell,在执行期间将不再存在。将
"$@"
逐字传递任何参数pbcopy
(旧的 shell 需要${1+"$@"}
正确处理无参数之类的东西,但现代的 shell 实现并非如此。)这与使用符号链接方法时的参数相同。不要忘记使脚本可执行:
我不确定 by 预期的论点是否
xclip
真的与由 解释的论点相匹配pbcopy
,但我的猜测是它们不应该。如果您想将通常采用的参数转换为由xclip
解析的参数pbcopy
,则此脚本也是执行此操作的合适位置。