Bisakah seseorang menjelaskan kepada saya perbedaan antara >dan >>ketika menggunakan perintah shell?
Contoh:
ps -aux > log
ps -aux >> log
Sepertinya hasilnya sama saja.
Bisakah seseorang menjelaskan kepada saya perbedaan antara >dan >>ketika menggunakan perintah shell?
Contoh:
ps -aux > log
ps -aux >> log
Sepertinya hasilnya sama saja.
Jawaban:
>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.
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.