SORU
3 Kasım 2014, PAZARTESİ


Neden /bin/sh ve her bir puan bile farklı /bin/bash için mi davranıyor?

Olduğum oynamak benim kabuk soruşturma cevap this question fark ettim ki, olsa bile /bin/sh işaret /bin/bash sistemim, bu iki komut farklı şekilde davranır. Öncelikle, çıktı

ls -lh /bin/sh

:

lrwxrwxrwx 1 root root 4 Apr 22  2013 /bin/sh -> bash*

Ancak, /bin/sh üzerinden aşağıdaki komutu çağırarak:

/bin/sh -c "script.sh 2> >( grep -v FILTER 2>&1 )"

bu hatayı döndürür:

/bin/sh: -c: line 0: syntax error near unexpected token '>'
/bin/sh: -c: line 0: 'script.sh 2> >( grep -v FILTER 2>&1 )'

/bin/bash: aynı komut çalıştırılırken

/bin/bash -c "script.sh 2> >( grep -v FILTER 2>&1 )"

başarılı bir şekilde yürütür, burada çıktı

This should be on stderr

Başvuru için, burada script.sh içeriği:

#!/bin/sh
echo "FILTER: This should be filtered out" 1>&2
echo "This should be on stderr" 1>&2
echo "FILTER: This should be filtered out" 1>&2

Neden iki çağırmaları farklı davranır mı?

CEVAP
3 Kasım 2014, PAZARTESİ


bash $argv[0] (bash, C uygulanır) değerini en başlatıldığı belirlemek için görünüyor.

sh olarak çağrıldığında, kendi davranış in the manual belgelenmiştir:

Eğer Bash adı ile çağrıldığında sh başlangıç taklit etmeye çalışır sh tarihi sürümleri davranış, mümkün olduğunca sıkı bir şekilde, süre POSIX uyumlu, standart olarak.

Etkileşimli giriş kabuğu olarak çağrıldığında, ya da etkileşimsiz olarak -login seçeneği ile shell, ilk okuma ve çalıştırma girişimleri /etc/profile o sırada ~/.profile, komutları. Bu --noprofile seçeneği bu davranışı engellemek için kullanılabilir. Adı ile etkileşimli bir kabuk olarak çağrıldığında sh, Bash değişkeni arar * *29, eğer tanımlı ise onun değerini artırıyor, ve genişletilmiş değerini kullanır okuma ve yürütme için bir dosya adı olarak. Bir kabuk sholarak çağrılan beri ve başka bir başlangıç komut okuma ve yürütme denemez dosyaları --rcfile seçeneği hiçbir etkisi olmaz. Etkileşimli olmayan bir kabuk adıyla çağrılan sh başka bir başlangıç okumak denemez dosyaları.

sh Bash olarak anlamışlardı başlangıç dosyaları sonra POSIX kipine girer okuyun

bash POSIX modunda documented here ne zaman uzun bir liste (şu anda 46 öğeler) değiştiren şeyler var.

(POSIX modunda çoğunlukla-bash sigara taşınabilirlik için komut dosyaları test etmek için bir yol olarak kabukları muhtemelen yararlıdır.)

Bu arada, davranışları altında çağrılan onlar adına bağlı olarak değişim programları oldukça yaygındır. grep, fgrep egrep bazı sürümleri tek bir çalıştırılabilir (grep bunu yapmayan) GNU olarak uygulanır. view genellikle ya vim; view salt okunur modda açmak için neden olarak çağırma vi sembolik bir bağlantıdır. Busybox sistem busybox yürütülebilir usta sembolik olduğunu tek tek komutları içerir.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • fast2hell

    fast2hell

    16 AĞUSTOS 2006
  • ibebrent

    ibebrent

    23 Temmuz 2007
  • Shantanu Sood

    Shantanu Soo

    3 Kasım 2008