Birisi bana kabuk komutlarını kullanırken >
ve arasındaki farkı açıklayabilir >>
mi?
Örnek:
ps -aux > log
ps -aux >> log
Her iki şekilde de sonuç aynı görünüyor.
Birisi bana kabuk komutlarını kullanırken >
ve arasındaki farkı açıklayabilir >>
mi?
Örnek:
ps -aux > log
ps -aux >> log
Her iki şekilde de sonuç aynı görünüyor.
Yanıtlar:
>
bir dosyanın üzerine yazmak (“ clobber ”) ve bir dosyayı >>
eklemek için kullanılır.
Böylece, kullandığınızda ps aux > file
, çıktısı ps aux
yazılır file
ve adlı bir dosya file
zaten varsa , içeriğinin üzerine yazılır.
Ve kullanırsanız ps aux >> file
, çıktısı ps aux
yazılır file
ve adlandırılmış dosya file
zaten mevcutsa, dosya şimdi ps aux
eski içeriğini ve eski içeriğinden sonra yazılan içeriğini içerecektir file
.
En önemli fark, >
kabuğun O_WRONLY|O_CREAT|O_TRUNC
bayraklı bir dosyayı veya dosyaya benzer bir nesneyi açmasını sağlar - dosya varsa dosya oluşturulur veya kesilir, bayraklı >>
dosya açar O_WRONLY|O_CREAT|O_APPEND
- dosya varsa oluşturulur veya eklenir. Örneğin, sistem çağrıları izlerseniz bu aşikardır.
$ 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
Ve birlikte
$ 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 +++
Her iki durumda da, açık dosyanın dosya tanımlayıcısının komutun dosya tanımlayıcısı 1'e (stdout) kopyalandığına ve bunun kabuk çatalının aldığı komutla miras alınacağına dikkat edin.