&>> & Ve 2> & 1 arasındaki yönlendirme farklılıkları


Yanıtlar:


7

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).


1
Ne demek istedin sh? 'S POSIX kabuk ise &>ve >&çalışmaz.
cuonglm

Ne yazık ki ilk ifade aslında yanlış. Clobber vs append için cevabımı görün.
Tom Hale

1

&>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:

&>>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.)

zshhem izin verir &>>ve >>&formlar.

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.