为了在环境之间保持信任,我认为在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第三个命令的行为应该像第一个命令,而不是第二个命令。
有什么想法吗?
发布于 2019-05-12 09:47:40
这通常发生在实现多个行为并通过检查调用它们的名称来决定哪一个行为的程序中。
这种技术在一些流行的工具中使用,比如busybox,它提供了大多数典型的Linux/Unix标准实用程序,都是在一个二进制文件中提供的。
在本例中,似乎相同的二进制文件同时实现了“复制”和“粘贴”行为,默认情况下它的行为类似于“粘贴”(除非被调用的名称与pbcopy精确匹配)。
通过使xclip成为一个调用pbcopy而不是符号链接的shell脚本,您可以轻松地解决这个问题。这大致相当于您目前拥有的内容:
#!/bin/sh
exec pbcopy "$@"exec确保pbcopy将在相同的进程中运行,将取代在执行过程中不再存在的shell。
"$@"将把所有参数逐字传递给pbcopy (旧的shell需要像${1+"$@"}这样的东西来正确地处理参数,但在shell的现代实现中并非如此)。这与使用符号链接方法时发生的参数相同。
不要忘记使脚本可执行:
$ chmod +x /usr/local/bin/xclip我不确定xclip所期望的参数是否真的与pbcopy解释的参数相匹配,但我猜它们不应该。如果您想将xclip通常使用的参数转换为pbcopy解析的参数,那么这个脚本也是一个合适的地方。
https://unix.stackexchange.com/questions/518497
复制相似问题