-1

コマンドを実行すると:

猫 < フー > フー

fooはatribaryファイルなので、 catコマンドの入力と出力をfooにしているので、foo は変わらない思いました。しかし、このコマンドはfooを消去することが判明しました。それ以外の場合、入力をバーにリダイレクトすると

cat < foo > バー

次に、 barfooのコピーです。私はそれを理解できない理由は何ですか?ここで何が欠けていますか?

4

1 に答える 1

1

ファイルへの出力のリダイレクトは、コマンドを実行するシェルによって行われ、ファイルの内容が完全に消去されます。これは、まさに最初のコマンドで表示されるものです。2 番目のコマンドは、新しいファイルを作成bar(または上書き) します。

シェルは何をするかを知りませんし、気にもしませんcat。それが知っているのは、実行catして、あるファイルからの入力を読み取らせ、別のファイルにリダイレクトさせることだけです。

ファイルの内容をコマンドの出力に置き換えたい場合foo、最も移植性の高い方法は一時ファイルを使用することです。以下はそのスケルトンです。

tmpfile=.....  # temporary name - see mktemp for portable secure ways to create it!
cat < foo > $tmpfile
mv $tmpfile foo
于 2013-10-27T23:46:17.580 に答える