Bu SO iş parçacığı ve diğer birkaç iş parçacığı üzerinde yeniden yönlendirme stdout
ve stderr
bir 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 stdout
ve stderr
bir 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 stderr
için stdout
hangi 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ü, bash
vezsh
Fakat:
Sadece >&
çalışır csh
veyatcsh
[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 ksh
tek 2>&1
eser.
$ ./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ı)zsh
Manuel Yönlendirmeler bölümü söylüyor:
&>
>&
eşdeğerdir.
Her ikisi de dosyayı gizleyecektir - sadece > file
STDIN durumunda olduğu gibi, dosyayı yazmadan önce 0 bayta kısaltın.
Ancak , bash
manuel 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 bash
komut dosyası yazması gerekiyorsa, ilk formda parmak belleği almak muhtemelen iyi bir uygulamadır .
>> logfile 2>&1
ve &>>
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:
&>>word
Bu 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
.)
zsh
hem izin verir &>>
ve >>&
formlar.