2016-10-31 28 views
0

私はLinuxの初心者です。私はこれを試したときにcatコマンドについて学んでいました。catとlsコマンドのパイプライン化

[email protected]:~$ cat file 
Videos/Arrow/Season* 
[email protected]:~$ cat file | ls -l 

コマンドは、代わりにファイルに記載されたフォルダの現在のフォルダの内容..しかし、私は期待フォルダの内容が表示され、正しくこの

[email protected]:~$ cat file 
Videos/Arrow/Season* 
[email protected]:~$ ls -l $(cat file) 

をしたとき。この場合、なぜパイプラインを使用しないのですか?

+0

ファイル名として使用するためにテキストを 'ls'に「パイプ」することはできません。 lsはそのように入力を受け付けません。 xargsを使用する必要があります(例: 'cat file | xargs ls -l'です。 xargsはstdinからデータを取り出し、指定されたコマンド( 'ls -l')にコマンドライン引数として渡します。 –

答えて

0

最初の例では、cat fileの出力をls -lの入力に渡しています。 ls -lは入力を受けないので、cat fileの出力に関して何もしません。しかし、2番目の例では$(cat file)を使用しており、ls -lに渡された引数の場所にcat fileという出力があり、このときls -lには何かのための正しい場所にfileというテキストがあります。ここでの問題は、プログラムの標準入力とプログラムの引数の違いに気づいています。標準入力は、例えばCでscanfと呼ぶときのものです。引数は、argvポインタがメインプロシージャのパラメータとして渡されたときのものです。

関連する問題