Bu SO iş parçacığı ve diğer birkaç iş parçacığı üzerinde yeniden yönlendirme stdoutve stderrbir dosyaya aşağıdaki komutları gördüm .
Hepsi eşdeğer mi? Aralarında fark var mı?
command1 >> logfile 2>&1
command &> logfile
command >& logfile
Bu SO iş parçacığı ve diğer birkaç iş parçacığı üzerinde yeniden yönlendirme stdoutve stderrbir dosyaya aşağıdaki komutları gördüm .
Hepsi eşdeğer mi? Aralarında fark var mı?
command1 >> logfile 2>&1
command &> logfile
command >& logfile
Yanıtlar:
Etiketlediğinizden zsh, size 3 yönlendirmenin hepsinin aynı şekilde çalıştığını söyleyeyim. Her iki yinelenen mesajların (yorumunda bir ve yazınıza bir) okumuş olabileceğiniz gibi, hepsi yönlendirme stderriçin stdouthangi inturn dosyası 'günlük dosyası' yönlendirilir (yani günlük dosyası çıktı ve hataları hem içerecektir ).
Ancak davranışları bulunduğunuz kabuğa bağlı olarak LOT'u değiştirir.
Üç yönlendirme stilinin tümü, bashvezsh
Fakat:
Sadece >&çalışır cshveyatcsh
[soum@server ~]$ ./test.sh > logfile 2>&1
Ambiguous output redirect.
[soum@server ~]$ ./test.sh &> logfile
Invalid null command.
[soum@server ~]$ ./test.sh >& logfile
[soum@server ~]$ echo $SHELL
/bin/tcsh
[soum@server ~]$
Gelen kshtek 2>&1eser.
$ ./test.sh >& logfile
-ksh: logfile: bad file unit number
$ ./test.sh &> logfile
[1] 23039
$ 1 2 3 4 5 6 logfile test.sh
ls: cannot access ttr: No such file or directory
[1] + Done(2) ./test.sh &> logfile
Nefret ediyorum ksh. >&Sadece bir hata verirken , &>arka plan komutun bir kısmını arka plana aldı ve log dosyasını boşalttı (boş değilse).
sh? 'S POSIX kabuk ise &>ve >&çalışmaz.
&>ve >&yarı eşdeğerlik (hızlandırıcı)zshManuel Yönlendirmeler bölümü söylüyor:
&>>&eşdeğerdir.
Her ikisi de dosyayı gizleyecektir - sadece > fileSTDIN durumunda olduğu gibi, dosyayı yazmadan önce 0 bayta kısaltın.
Ancak , bashmanuel Yönlendirmeler bölümü şunları ekler:
İki formdan ilki tercih edilir. Bu anlamsal olarak eşdeğerdir
>word 2>&1İkinci formu kullanırken, kelime bir sayıya genişletilemez veya
-. Varsa, uyumluluk nedeniyle diğer yönlendirme işleçleri uygulanır (aşağıdaki Dosya Tanımlayıcılarını Çoğaltma konusuna bakın).
Bu nedenle, etiketleme yaparken zsh, bir bashkomut dosyası yazması gerekiyorsa, ilk formda parmak belleği almak muhtemelen iyi bir uygulamadır .
>> logfile 2>&1ve &>>denklik (ekleme)Burada, logfileüzerine yazılmaz, dosyanın sonuna yazmak için açılır, yani append mode ( O_APPEND).
Her ikisinde de eşdeğer {ba,z}sh:
command1 &>> logfile
İçinde bash:
Standart çıktı ve standart hata ekleme biçimi şöyledir:
&>>wordBu anlamsal olarak eşdeğerdir
>>word 2>&1(aşağıdaki Dosya Tanımlayıcılarını Çoğaltma konusuna bakın).
(Not: bir clobber kullanımı &>üzerinde >&bölümünde yine verilen tavsiye edilir yukarıdaki ekleme için tek yol vardır bash.)
zshhem izin verir &>>ve >>&formlar.