標準入力を吸収するためにこの関数を使用できないのはなぜですか?

標準入力を吸収するためにこの関数を使用できないのはなぜですか?

これ:

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.txtfile.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実行前に発生するためです。

おすすめ記事