sed -i
シンボリックリンクで実行すると、リンクが壊れてオブジェクトファイルに置き換えられるのはなぜですか?この状況を避ける方法は?
例えば。
$ ls -l pet*
-rw-rw-r-- 1 madneon madneon 4 mar 23 16:46 pet
lrwxrwxrwx 1 madneon madneon 6 mar 23 16:48 pet_link -> pet
$ sed -i 's/cat/dog/' pet_link
$ ls -l pet*
-rw-rw-r-- 1 madneon madneon 4 mar 23 16:48 pet
-rw-rw-r-- 1 madneon madneon 4 mar 23 16:49 pet_link
なぜエラーと見なされないのですか?
ベストアンサー1
-i
/flag--in-place
ファイルを所定の位置に編集します。デフォルトでは、指定さsed
れたファイルを読み込み、そのファイルの処理内容を一時ファイルに出力し、元のファイルがシンボリックリンクであることを確認せずに、元のファイルの上に一時ファイルをコピーします。
GNUには必要に応じて動作させるフラグがsed
あります。--follow-symlinks
$ echo "cat" > pet
$ ln --symbolic pet pet_link
$ sed --in-place --follow-symlinks 's/cat/dog/' pet_link
$ cat pet
dog