30Jul

Ne Zaman Kullanılmalıdır? /bin/ bash # yerine! /bin/ sh bir Kabuk Komut Dosyası'nda mı?

click fraud protection

Yeni bir kabuk komut dosyası oluştururken mümkün olduğunca sorunsuz olduğundan emin olmak istersiniz, ancak bazen hangisinin sizin için en iyisi hangisi olduğunu bilmek biraz kafa karıştırıcı olabilir. Bu notta, günümüzün Süper Kullanıcı Q & A mesajı, karıştırılmış bir okuyucu sorusunun cevabını buluyor.

Bugünkü Soru &Yanıt oturumu bize Q & A web sitelerinin topluluk temelli bir gruplandırması olan Stack Exchange'in bir alt bölümü olan SuperUser nezaketen geliyor.

Soru

SuperUser okuyucu Hendre # kullanmanın daha iyi olduğunu bilmek istiyor! /bin/ bash # yerine !/bin/ sh kabuk komut dosyalarında:

Ne zaman # kullanmak daha uygundur? /bin/ bash yerine #!/bin/ sh bir kabuk komut dosyası içinde?

Ne zaman # kullanmak daha iyidir? /bin/ yerine # bash !/bin/ sh bir kabuk komut dosyası içinde?

Cevap

SuperUser katkıda bulunan kişi bize cevap vermektedir:

Kısacası:

  • POSIX sh teknik özelliklerinin bir üst kümesini uygulayan birkaç kabuk vardır. Farklı sistemlerde,
    instagram viewer
    /bin/ sh , kül, bash, çizgi, ksh, zsh, vb. Bir bağlantı olabilir. Her zaman sh uyumludur, asla csh veya balık olmaz.
  • Sadece sh özelliklerine bağlı kaldığınız sürece, # 'yi kullanabilirsiniz! /bin/ sh ve betik hangi kabuk olursa olsun, iyi çalışmalıdır.
  • Bash'a özgü özellikleri( yani, diziler) kullanmaya başlıyorsanız, bash'yi özellikle belirtmelisiniz, çünkü /bin/ sh zaten sisteminizde bash'yi çağırırsa bile, herkesin sistemi üzerinde olmayabilir ve senaryonuz orada çalışmaz. Aynı şey, elbette zsh ve ksh için de geçerlidir.
  • Betik yalnızca kişisel kullanım içindir, bazı işletim sistemlerinin yükseltme sırasında /bin/ sh 'yi değiştirdiğini fark edebilirsiniz.Örneğin, Debian'da bash eskiden kullanılıyordu, ancak daha sonra çok kısa çizgi ile değiştirildi. Bashisms kullanılan ancak # vardı Komut dosyaları!/bin/ sh aniden koptu.

Ancak:

  • bile #!/bin/ bash doğru değil. Farklı sistemlerde, bash /usr/ bin , /usr/pkg/ bin veya /usr/local/ bin 'de yaşayabilir.
  • Daha güvenilir bir seçenek #!/usr/bin/ env bash , $ PATH kullanıyor. /usr/bin/ env , env aracının kendisinin de kesin olarak garanti edilmesine rağmen, /bin/ bash daha fazla sistemde hala çalışır.

Açıklamaya eklemek için bir şey var mı?Yorumların sesini kapatın. Diğer teknik uzman Stack Exchange kullanıcılarından daha fazla cevap okumak ister misiniz? Buradaki tam tartışma dizinine göz atın.

Resim Kredisi: Wikipedia