コマンドの実行とリダイレクトの順序

コマンドの実行とリダイレクトの順序

私が作成しているbashスクリプトの場合は、ディレクトリから最新の2つのファイルを除くすべてのファイルを削除する必要があります。

私はls -tUr > somefile.txt最新の2つを使用して追跡し、別の場所に移動してrm *から再度移動することにしました。

何らかの理由で実際にコマンドを使用するのが混乱している部分がsomefile.txt(ファイルの残りの部分に)表示されます。somefile.txttail

だから私の質問は、論理的にls現在のフォルダ/ファイルが返された後にリダイレクトされますが、明らかに実行する前に存在する必要があるsomefile.txtため、これは起こらないということです。somefile.txtls

ベストアンサー1

これは、「なぜこれが起こるのか」という質問に対する答えです。

はい、実際にsomefile.txt実行する前に作成されます。ls

$ utility >file

最初に行われることは、シェルがリダイレクトを認識して作成file(またはすでに存在する場合は切り捨て)することです。それからutility標準出力ストリームは実行時に入りますfile

ユーティリティは通常、標準出力がどこに行くのか分からず、気にしません(たとえば、一部のユーティリティはlsTTYであることを確認し、それに応じて動作を変更します)。したがって、通常の出力ファイル、パイプに書き込むかどうかは重要ではありません。 、デバイスファイルまたはソケット。もちろん関係ありません。作るこのファイル。したがって、シェルの作業は、プロセスが開始される前にパイプが正しい位置にあることを確認することです。これには、file上記の例で指定されたファイルを作成または切り捨てる操作が含まれます。

最新のファイルを除くすべてのファイルを削除する質問に対する回答は、最も古いファイルの削除

おすすめ記事