観察する:
$ ls
$ ls > list
$ cat list
list
ls
これは、ファイルに対してリダイレクトを実行したときにlist
すでに起動され、list
ファイルが作成されたことを示すようです。とにかく、それは十分に良い説明ですが、質問は:どのようにこれが起こらないようにすることができますか?私が期待するのは、ls
その出力を実行してダンプすることですがlist
、これが私が望むものです。
ベストアンサー1
ご存知のように、ファイルはls
実行前に作成されます。これは、シェルが作業順序を処理する方法によるものです。するために
ls > file
ケーシングが必要作る file
次にstdoutがそれを指すように設定し、最後にプログラムを実行しますls
。
したがって、いくつかのオプションがあります。
- 別のディレクトリ(たとえば)にファイルを作成し、
/tmp
最終mv
ディレクトリにコピーします。 - 隠しファイル()にして
.file
名前を変更します。 grep
出力からファイルを削除するために使用されます。- だまされる:-)
不正行為は次のとおりです。
x=$(ls) ; printf "%s\n" "$x" > file
その結果、出力が変数に保存ls
され、それが作成されます。