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

3番目のコマンドは、2番目のコマンドではなく最初のコマンドのように機能する必要があります。

どんなアイデアがありますか?

答え1

これは通常、複数の動作を実装し、呼び出し名を調べて実行する動作を決定するプログラムで発生します。

busyboxこの技術は、ほとんどの一般的なLinux / Unix標準ユーティリティを単一のバイナリファイルとして提供するなど、一部の一般的なツールで使用されています。

この場合、同じバイナリが「コピー」と「貼り付け」の動作を実装しているように見え、デフォルトでは「貼り付け」のように動作します(呼び出した名前が正確に一致しない限りpbcopy)。

シンボリックリンクの代わりに呼び出すシェルスクリプトを作成すると、この問題を簡単に解決できますxclippbcopyこれは現在持っているものとほぼ同じです。

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

同じプロセスで実行されてexecいることを確認すると、シェルが置き換えられ、実行中にシェルはもう存在しません。pbcopy

これは"$@"すべての引数をそのまま渡しますpbcopy(以前のシェルでは${1+"$@"}引数を正しく処理しないような作業が必要でしたが、現代のシェル実装ではそうではありません)。

スクリプトを実行可能にすることを忘れないでください。

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

xclip予想されるパラメータが実際に解釈されたパラメータと一致するかどうかはわかりませんがpbcopy、私の考えには一致してはいけません。よく使用される引数をxclip解析された引数に変換したい場合でも、pbcopyこのスクリプトを使用することをお勧めします。

関連情報