Neden 'nohup komutu> & / dev / null' bazı kabuklarda "çalışıyor" gibi görünüyor?


12

Ask Ubuntu'da aşağıdakileri öneren bir cevap düzenledim

nohup gedit >& /dev/null & 

Aslında demek istedikleri zaman

nohup gedit &> /dev/null & 

İkincisi hem stderr hem de stdout'u doğru bir şekilde yönlendirir /dev/null. Eski ya da adlandırılan bir dosya oluşturmak için bekliyordum, ya &da daha büyük olasılıkla, diğer durumlarda olduğu gibi bir hata vermek için:

$ echo "foo" >& 
bash: syntax error near unexpected token `newline'

Bunun yerine, öncekiyle aynı şekilde çalışıyor gibi görünüyor, bir geditpencere görünüyor ve hiçbir hata mesajı yazdırılmıyor.

Ayrıca bu kabuk özgü olduğunu unutmayın:

  • bash(4.2.45 (1) -release), zsh(5.0.2), csh(deb paket sürümü: 20110502-2) ve tcsh(6.18.01): yukarıda açıklandığı gibi çalışır, hata mesajı yok, dosya oluşturulmadı.

  • dash (0.5.7-3):

    $ nohup gedit >& /dev/null & 
    $ dash: 2: Syntax error: Bad fd number
  • ksh(93u + 2012-08-01): başarısız oluyor, ancak 1223hiçbir geditpencere görünmese de bir işlem açıkça başlatıldı ( ) :

    $ nohup gedit >& /dev/null & 
    [1] 1223
    $ ksh: /dev/null: bad file unit number
  • fish (2.0.0):

    > nohup gedit >& /dev/null & 
    fish: Requested redirection to something that is not a file descriptor /dev/null
    nohup gedit >& /dev/null & 
                   ^

Peki, bu komut neden bazı kabuklarda hatasız (ve çıktı dosyası oluşturulmamış) çalışıyor ve bazılarında başarısız oluyor? >&Görünüşe göre özel durumda ne yapıyor nohup? Sanırım bu >& /dev/nullolarak yorumlanıyor >&/dev/nullama alan neden bu kabuklarda hataya neden olmuyor?


Makinemde Ubuntu 12.04, bu komut normal şekilde çalışıyor dash.
cuonglm

nohup commandBenim bellek, çalıştırmak bağımsız tty sizin application.According dashgenişletilmiş ash, Debian ash, ashtarafından geliştirilen OpenBSDve sınırlı kabuk, hatta Maemo OS çizgi kullanır (n900 cep üzerinde Debian Base) var, ashaile kabuk sınırlı kullanım Bash veya tcsh beklediğiniz var.
PersianGulf

@Gnouc ha, belki farklı bir versiyon (Debian'dayım)? Sürümümü dashyazdırmamı nasıl sağlayacağımı anlayamıyorum, ancak paket 0.5.7-3nedir? Ayrıca koştuğunuzdan emin misiniz dash? Bu Ubuntu'nun varsayılanı shdeğil mi?
terdon

@MohsenPahlevanzadeh Ne demek istediğinizden emin değilim, ne işe yaradığını biliyorum nohup, sorum şu anda neden >&bazı kabuklarda nohup ile çalışıyor gibi görünüyor.
terdon

Kabukların soyut görüntülenmesi için aşağıdaki bağlantıyı kullanabilirsiniz: unix.stackexchange.com/questions/45684/…
PersianGulf

Yanıtlar:


18
nohup gedit &> /dev/null

POSIX sözdizimidir ve aynıdır:

nohup gedit &
> /dev/null

Bu nohup geditarka planda çalıştırılır ve daha sonra > /dev/nullbir komut çalıştırmadan yeniden yönlendirme yapılır.

nohup gedit >& /dev/null

POSIX sözdizimi değildir ve cshhem stdout hem de stderr'yi / dev / null'a yönlendirmenin yoludur. Bourne'da bulunan operatöre cshsahip olmadığından stderr'i yönlendirmenin 2>&1tek yolu budur csh.

zsh(genellikle) cshsözdizimi de sağlar , ancak Bourne kabuğunun x>&y fd çoğaltma operatörünü de destekler , bu da orada bir çatışma olduğu anlamına gelir.

ls >&file

ls'nin stdout ve stderr' sine yönlendirir file, ancak dosya şu ise 2,

ls >&2

"stdout" terimi fd 2 ( dup(2, 1)) ile gösterilen kaynağa yönlendirme anlamına gelir . Yani yazmanız gerekiyor:

ls >& ./2

stdout ve stderr öğelerini geçerli dizinde lsçağrılan bir dosyaya yeniden yönlendirmek istiyorsanız 2; veya standart sözdizimini kullanın.

bashbaşlangıçta anlamadı >&, ancak bunun &>yerine operatörü tanıttı , süreçte POSIX uyumluluğunu kırdı (bir komut dosyasının kullanması pek mümkün olmasa da cmd &> xxx).

kshbu operatörü 2009'da ksh93t + 'da, 2008'de R35'te ( posixmodda devre dışı ) kopyaladı ama kopyalamadı >&.

bash>&2.05 için destek eklendi .

busybox shhem desteği eklendi &>ve >&1.13 (2008).

Ne yönlendirme stdoutu ve stderr >&ne &>de anlam olarak POSIX / Bourne değildir.

Hem stdout hem de stderr'yi taşınabilir olarak yeniden yönlendirmek istiyorsanız, sözdizimi

cmd > file 2>&1

Şunu mu demek istediniz: Bash in POSIX/Bourneby "Bourne"?
Pandya
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.