web-dev-qa-db-ja.com

コマンドの出力をlsにリダイレクトするにはどうすればよいですか?

リダイレクトに問題があります:

$ which python3

くれます

/Library/Frameworks/Python.framework/Versions/3.7/bin/python3

そして

$ ls -l /Library/Frameworks/Python.framework/Versions/3.7/bin/python3

くれます

lrwxr-xr-x  1 root  admin  9  5 fév 18:30 /Library/Frameworks/Python.framework/Versions/3.7/bin/python3 -> python3.7

だが

which python3 | ls -l

同じ結果にならないでください。

なぜなのかご存知ですか ?そして、リダイレクトの正しいコマンドは何ですか?

OSXを使用しています。

次の質問 前のコマンドの出力を次の引数として次へ渡す はこれと同じかもしれませんが、与えられた答えを見ると失われています。役立つためには、ここで説明するよりも高度な知識や研究が必要です。

4
Raoul HATTERER

lsは標準入力からではなく、引数からのみ入力を受け取ります。

ls -l "$(which python3)"をお試しください

13
ctrl-alt-delor

lsはパイプから読み取りません。実際、lsは標準入力をまったく使用しません。

代わりに、lsのコマンドラインを介して、ls -lを実行するものを渡す必要があります。

ls -l "$( which python3 )"

これはls -lのコマンドラインでコマンド置換を使用し、whichコマンドの出力に展開されます。これは、lsのコマンドライン引数として使用されます。

または:

ls -l "$( command -v python3 )"

関連:

12
Kusalananda

他の答えも良いですが、これも便利です:

which python3 | xargs ls -l

xargsstdinから値を取得し、それらをコマンドライン引数として指定されたプログラムに追加します。

5
jick