再現する方法は次のとおりです。
echo 'the original file' > orig
ln -s orig symb # now symb is symlinked to orig
cat symb > orig # this makes orig an EMPTY FILE, but why?
orig
3番目のコマンド以降は空のファイルになりますが、なぜですか?
答え1
ファイルを開こうとすると、シンボリックリンクが評価されます。 「通常の」状況でシンボリックリンクを開くと、そのリンクが参照するファイルが開きます。だから:
ln -s original_file my_symlink
cat my_symlink > original_file
次のようによく似ています。
cat original_file > original_file
なぜコンテンツが壊れたのですか?
すべてのシェルでcommand > some_file
最初に開いて切ります(0)some_file
。それから実行しcommand
て結果を作成しますsome_file
。
したがって、cat x > x
シェルが開いて切り取られたx
場合それから cat x
開いて読む切り取ったファイル書き込みはすべて0バイトです。