Apa perbedaan antara ">" dan ">>" dalam perintah shell?


Jawaban:


48

>digunakan untuk menimpa (" clobber ") file dan >>digunakan untuk menambahkan file.

Dengan demikian, ketika Anda menggunakan ps aux > file, output dari ps auxakan ditulis ke filedan jika file bernama filesudah ada, isinya akan ditimpa.

Dan jika Anda menggunakan ps aux >> file, output dari ps auxakan ditulis ke filedan jika file bernama filesudah ada, file sekarang akan berisi konten sebelumnya dan juga isi ps aux, ditulis setelah konten yang lebih lama dari file.


11

jika Anda menulis di terminal

ps aux > log

Ini akan menempatkan output ps auxke file bernama log.

maka jika Anda menempatkan

ps aux >> log

maka output selanjutnya akan ditambahkan di bawah yang pertama. jika Anda hanya meletakkan satu >file itu akan menimpa file sebelumnya.


4

Ya, >>tambahkan, >selalu menimpa / menghancurkan konten sebelumnya.

ps -aux > log

sama dengan

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

Di Wintel itu sama untuk .bat, .cmddan .ps1naskah juga; warisan bersama, akal sehat.


3

Perbedaan paling penting adalah >membuat shell membuka file atau objek seperti file dengan O_WRONLY|O_CREAT|O_TRUNCflag - file akan dibuat atau terpotong jika ada, sementara >>file dibuka dengan O_WRONLY|O_CREAT|O_APPENDflag - file akan dibuat atau ditambahkan jika ada. Ini terbukti jika Anda melacak panggilan sistem, misalnya dengan

$ 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

Dan dengan

$ 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 +++

Perhatikan bahwa dalam kedua kasus, deskriptor file dari file terbuka digandakan ke file descriptor 1 (stdout) dari perintah, dan itu akan diwarisi oleh perintah apa pun yang di-shell shell.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.