コマンドを実行しています。
ls > a.txt | sort > b.txt
このコマンドは次のことを行います。
実装する
ls
種類
ソートされた出力を生成して
a.txt
保存します。a.txt
創造
b.txt
だが、空。
誰でもこれを説明できますか?
私は自分のシェルを実装しており、この動作を理解してシミュレーションする必要があります。
答え1
|
左コマンドの出力を右コマンドの入力として供給します。オペレータは>
コマンドの出力を取得し、ファイルに保存します。これは、あなたの例で到着すると、すべて|
が出力されないことを意味しますa.txt
。したがって、sort
右側の操作は空の文字列に対して操作を実行し、それを次の場所に保存します。b.txt
tee
おそらくあなたが望むのは、ファイルと標準出力の両方に書き込むことができるコマンドを使用することです。
ls | tee a.txt | sort > b.txt
あなたが何をしたいのか本当に気になりますが、ls
あなたのために物事を整理することも整理することもできます。
答え2
ls > a.txt | sort > b.txt
を実行していますls
。それではあなたはリダイレクトしています。標準出力のみ次に、PIPE STDOUTを介してsortコマンドのSTDINにパイプSTDOUTをパイプしようとしますls
。a.txt
STDOUT がファイルにリダイレクトされるため、a.txt
sort コマンドの STDIN に sort の内容がないため、b.txt
ファイルは空です。
b.txt
ファイルから予想されるコンテンツを作成する方法はいくつかあります。
ls | sort > b.txt
または
ls > a.txt ; cat a.txt | sort > b.txt
どちらも実際にPIPEの左側にあるSTDOUTからのデータをPIPEの右側にあるSTDINに渡す必要があります。
答え3
TimとEricが言ったのと同様に、次のように>
STDOUTをファイルにリダイレクトするとき|
sort
tee
同時に2つのことをする:
- STDINをファイルに送信する
- STDINをSTDOUTに直接割り当てる
その結果、STDIN(ls
コマンド)がファイルに保存され、コマンドで使用するためにSTDOUTに出力が続行されますsort
。使用中の修正されたコマンドは次のとおりです。
ls | tee a.txt | sort > b.txt