シェルコマンドの「>」と「>>」の違いは何ですか?


回答:


48

>ファイルの上書き(「clobber」)に>>使用され、ファイルへの追加に使用されます。

したがって、を使用するとps aux > file、の出力ps auxが書き込まれfile、指定されたファイルfileが既に存在する場合、その内容は上書きされます。

を使用するとps aux >> file、の出力ps auxが書き込まれfile、指定されたファイルfileが既に存在する場合、ファイルには以前のコンテンツとps aux、の古いコンテンツの後に書き込まれたのコンテンツも含まれますfile


11

ターミナルで書く場合

ps aux > log

それは、ps aux指定されたファイルをログに出力します。

その後、置く場合

ps aux >> log

次の出力が最初の出力の下に追加されます。1つだけ配置>すると、前のファイルが上書きされます。


4

はい、>>追加し、>常に以前のコンテンツを上書き/破棄します。

ps -aux > log

と同じです

rm log 2>/dev/null
ps -aux >> log

ウィンテルにそれがために同じであり.bat.cmdそして.ps1あまりにもスクリプト。共通の遺産、常識。


3

最も重要な違いは、フラグを>使用してファイルまたはファイルのようなオブジェクトをシェルで開くことです。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)に複製され、シェルがフォークするコマンドに継承されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.