Clipboard

符號連結時,Pbcopy 充當 Pbpaste

  • May 12, 2019

為了使我的配置在不同環境之間保持正常,我認為在 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 腳本。這大致相當於您目前擁有的:

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

exec確保將pbcopy在同一程序中執行,將替換 shell,在執行期間將不再存在。

"$@"逐字傳遞任何參數pbcopy(舊的 shell 需要${1+"$@"}正確處理無參數之類的東西,但現代的 shell 實現並非如此。)這與使用符號連結方法時的參數相同。

不要忘記使腳本可執行:

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

我不確定 by 預期的論點是否xclip真的與由 解釋的論點相匹配pbcopy,但我的猜測是它們不應該。如果您想將通常採用的參數轉換為由xclip解析的參數pbcopy,則此腳本也是執行此操作的合適位置。

引用自:https://unix.stackexchange.com/questions/518497