Shell komutunda “>” ve “>>” arasındaki fark nedir?


Yanıtlar:


48

>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 auxyazılır fileve adlı bir dosya filezaten varsa , içeriğinin üzerine yazılır.

Ve kullanırsanız ps aux >> file, çıktısı ps auxyazılır fileve adlandırılmış dosya filezaten mevcutsa, dosya şimdi ps auxeski içeriğini ve eski içeriğinden sonra yazılan içeriğini içerecektir file.


11

eğer terminalde yazarsanız

ps aux > log

ps auxLog adlı dosyanın çıktısını alacaktır .

o zaman koyarsan

ps aux >> log

daha sonra bir sonraki çıktı birincinin altına eklenecektir. sadece birini koyarsanız >önceki dosyanın üzerine yazacaktır.


4

Evet, >>ekler, >her zaman önceki içeriğin üzerine yazar / bunları yok eder.

ps -aux > log

aynıdır

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

Wintel günü bunun için aynıdır .bat, .cmdve .ps1komut çok; sağduyu, sağduyu.


3

En önemli fark, >kabuğun O_WRONLY|O_CREAT|O_TRUNCbayraklı 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.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.