sed -iがシンボリックリンクをファイルに置き換えるのはなぜですか? [コピー]

sed -iがシンボリックリンクをファイルに置き換えるのはなぜですか? [コピー]

sed -iシンボリックリンクに編集内容を適用したときに奇妙な動作が見つかりました。文書には-i内部編集があることがわかります。ただし、シンボリックリンクはファイルに置き換えられます。

再現段階:

cd /tmp
echo blah > foo
ln -s foo bar
sed -i -e 's/ah/ub/' bar
ls -l

結果は次のとおりです。

-rw-rw-r--. 1 arogge   arogge      5 Mar  9 15:07 bar
-rw-rw-r--. 1 arogge   arogge      5 Mar  9 15:07 foo

これは予想される動作ですか、それともバグですかsed

ベストアンサー1

これは予想される動作です。

-i/フラグは--in-placeファイルの一時コピーを編集し、コピーを元のファイルの上に移動します。

だからあなたがするとき:

sed -i 'bla' symlink

sedがすることは次のとおりです。

sed 'bla' symlink > temp_file
mv temp_file symlink

したがって、その場所に通常のファイルを配置してシンボリックリンクを切断します。

以下から取得した情報コメント存在するsed -iがシンボリックリンクを破るのを防ぐ方法は?

おすすめ記事