[duplicate]コマンドで処理されたソースファイルと同じファイルにリダイレクト

[duplicate]コマンドで処理されたソースファイルと同じファイルにリダイレクト
  1. ここではリダイレクトは許可されません。許可されていませんかcat?しかし、リダイレクトは実行されるコマンドから独立していませんか?

    $ cat bk > bk
    cat: bk: input file is output file
    
  2. 次のリダイレクトによってファイルが消去されるのはなぜですか?

    $ less  bk > bk
    

    awklessまた、リダイレクトと同様に動作します。awk実際に問題を発見した部分がありますが、上記の例は言葉ではありません。

通常、リダイレクトを使用する正しい方法は何ですか?

ベストアンサー1

問題は、出力リダイレクトがless開始する前にファイルを終了することです。

open("file", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 3
dup2(3, 1)                        = 1
close(3)                          = 0
execve("/usr/bin/less", ["less", "-WNS", "file"], [/* 102 vars */]) = 0

通常の出力リダイレクトはこのファイルを上書きします。O_TRUNC(参照)man 2 openファイルの内容を削除します。

おすすめ記事