誰かが私には違い説明できた>と>>シェルコマンドを使用していますか?
例:
ps -aux > log
ps -aux >> log
結果はどちらの方法でも同じようです。
誰かが私には違い説明できた>と>>シェルコマンドを使用していますか?
例:
ps -aux > log
ps -aux >> log
結果はどちらの方法でも同じようです。
回答:
最も重要な違いは、フラグを>使用してファイルまたはファイルのようなオブジェクトをシェルで開くことです。O_WRONLY|O_CREAT|O_TRUNCファイルが存在する場合はファイルを作成または切り捨て>>、O_WRONLY|O_CREAT|O_APPENDフラグを使用してファイルを開く-存在する場合はファイルを作成または追加します。これは、たとえば次のようにシステムコールをトレースすると明らかです。
$ strace -e open,dup2 bash -c 'true >> /dev/null'
...
open("/dev/null", O_WRONLY|O_CREAT|O_APPEND, 0666) = 3
dup2(3, 1) = 1
dup2(10, 1) = 1
そして
$ strace -e open,dup2 bash -c 'true > /dev/null'
...
open("/dev/null", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 3
dup2(3, 1) = 1
dup2(10, 1) = 1
+++ exited with 0 +++
どちらの場合でも、開いているファイルのファイル記述子はコマンドのファイル記述子1(stdout)に複製され、シェルがフォークするコマンドに継承されます。