lsの出力をファイルにリダイレクトすると、ファイル名がファイルに含まれます。これをどのように避けることができますか?

lsの出力をファイルにリダイレクトすると、ファイル名がファイルに含まれます。これをどのように避けることができますか?

観察する:

$ ls
$ ls > list
$ cat list
list

lsこれは、ファイルに対してリダイレクトを実行したときにlistすでに起動され、listファイルが作成されたことを示すようです。とにかく、それは十分に良い説明ですが、質問は:どのようにこれが起こらないようにすることができますか?私が期待するのは、lsその出力を実行してダンプすることですがlist、これが私が望むものです。

ベストアンサー1

ご存知のように、ファイルはls実行前に作成されます。これは、シェルが作業順序を処理する方法によるものです。するために

ls > file

ケーシングが必要作る file次にstdoutがそれを指すように設定し、最後にプログラムを実行しますls

したがって、いくつかのオプションがあります。

  1. 別のディレクトリ(たとえば)にファイルを作成し、/tmp最終mvディレクトリにコピーします。
  2. 隠しファイル()にして.file名前を変更します。
  3. grep出力からファイルを削除するために使用されます。
  4. だまされる:-)

不正行為は次のとおりです。

x=$(ls) ; printf "%s\n" "$x" > file

その結果、出力が変数に保存lsされ、それが作成されます。

おすすめ記事