これ:
echo 'some text' > file.txt
cat file.txt > file.txt
明らかに私に空のファイルを与えるようです。
しかし、私を驚かせたのは次のとおりです。
cat2 () {
cat "$@" > tmp.txt
cat tmp.txt
return $?
}
echo 'some text' > file.txt
cat2 file.txt > file.txt
.tmp.txt
file.txt
この方法も通じません! :
echo 'some text' > file.txt
cat file.txt | cat2 > file.txt
ファイルが消去され続けるのはなぜですか?
ベストアンサー1
注文
cat2 file.txt > file.txt
新しい空きスペースを作りますfile.txt
今後関数を呼び出しますcat2
。
そのため、実行時にファイルcat2
は空になり、空のcat
出力が発生します。
作業の順序を破るのに役立つ場合、あなたがしたことは次のとおりです。
- コンテンツを含むfile.txtファイルを作成します。
- 新しい空のファイルfile.txtを作成します。
- cat2を実行し、file.txtとして出力します。
これは、リダイレクト演算子がcat2
実行前に発生するためです。