環境間で構成を適切に維持するには、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
)。
シンボリックリンクの代わりに呼び出すシェルスクリプトを作成すると、この問題を簡単に解決できますxclip
。pbcopy
これは現在持っているものとほぼ同じです。
#!/bin/sh
exec pbcopy "$@"
同じプロセスで実行されてexec
いることを確認すると、シェルが置き換えられ、実行中にシェルはもう存在しません。pbcopy
これは"$@"
すべての引数をそのまま渡しますpbcopy
(以前のシェルでは${1+"$@"}
引数を正しく処理しないような作業が必要でしたが、現代のシェル実装ではそうではありません)。
スクリプトを実行可能にすることを忘れないでください。
$ chmod +x /usr/local/bin/xclip
xclip
予想されるパラメータが実際に解釈されたパラメータと一致するかどうかはわかりませんがpbcopy
、私の考えには一致してはいけません。よく使用される引数をxclip
解析された引数に変換したい場合でも、pbcopy
このスクリプトを使用することをお勧めします。