59

私は今まで *nix パイプを理解していると思っていました...studioのインストールへのシンボリックリンクと呼ばれる実行可能ファイルがありAndroid Studio、リンク先の場所を取得できると想定していました

which studio | ls -l

しかし、それはうまくいきません。ls -lそれが私に与えることは、現在のディレクトリで実行したことと同じです。

を実行するwhich studioと、 が得られ/home/me/bin/studioます。実行するls -l /home/me/bin/studioと、シンボリックリンクの場所を示す期待される出力が得られます。

では、パイプ バージョンが機能しないのはなぜでしょうか。パイプについて理解していないことは何ですか?

4

3 に答える 3

85

これを行うには、次のものが必要ですxargs

which studio | xargs ls -l

からman xargs:

xargs - 標準入力からコマンドラインを構築して実行する

パイプがどのように機能するかを完全に理解するには、BASH でパイプがどのように機能するかについての簡単な説明は何ですか? を参照してください。:

Unix パイプは、最初のプロセスの STDOUT (標準出力) ファイル記述子を 2 番目のプロセスの STDIN (標準入力) に接続します。次に何が起こるかというと、最初のプロセスがその STDOUT に書き込むと、その出力は 2 番目のプロセスによって (STDIN から) すぐに読み取られるということです。

于 2013-08-13T13:51:57.440 に答える
31

ls引数を標準入力からではなく、コマンド ラインから読み取ります。コマンド ラインでディレクトリを取得するには、コマンド置換を使用する必要があります。

ls -l "$( which studio )"

(パスに空白が含まれる可能性がある場合は、二重引用符が必要です。)

于 2013-08-13T13:55:08.297 に答える
2

は入力を受け取らないためls -l、 の出力に関しては何もしませんwhich studio。ここで重要なことは、標準入力と引数の違いを理解することです。標準入力は、scanfプロシージャを使用して (たとえば、C のプログラムによって) 読み取られる特殊なファイルであり、プログラムへの引数は、argvおよびargcパラメータとしてメイン プロシージャに渡されます。argvchar のヌル終了配列の配列でありargc、その配列の長さです。

于 2016-10-31T18:17:58.810 に答える