Neden giriş yapıyoruz, giriş yapmıyor, etkileşimli ve etkileşimli olmayan bash kabukları var?


23

Bu yüzden bash man sayfaları giriş ve etkileşimli mermilerin ne olduğunu açıklıyor:

Bir oturum açma kabuğu, ilk argüman sıfırı bir - olan veya bir --login seçeneğiyle başlayan bir kabuktur.

Bir etkileşimli kabuk, seçenek olmayan argümanlar olmadan ve standart giriş ve hataların her ikisi de terminallere (isatty (3) tarafından belirlendiği gibi) bağlı olan) -c seçeneğinin olmadığı veya biri -i seçeneğiyle başlayan bir kabuktur. PS1 ayarlanır ve $ - eğer bash etkileşimli ise i bir kabuk betiğinin veya bir başlangıç ​​dosyasının bu durumu test etmesini sağlar.

Bunun 4 farklı mermi tipine sahip olabileceğimiz anlamına geldiğini düşünüyorum:

  • Etkileşimli giriş kabukları,
  • Etkileşimli olmayan oturum açma kabukları,
  • Etkileşimli oturum açma olmayan kabukları,
  • Etkileşimli olmayan oturum açma kabukları

Fakat neden ilk etapta etkileşimli / etkileşimli olmayan ve giriş / giriş dışı kabuklarımız var? Neden çeşitlilik? Sadece bir tür kabuğumuz olsaydı ne kaybederdik?

Ayrıca çalıştırarak bir giriş kabuğu olup olmadığımı belirlemeye çalışırken echo $-, çıktı:

himBH

Bu bitlerin bazıları açıklanmıştır burada , ama h, Hve maçıklanmayacaktır. Tüm bu bayrakları tanımlayan bir yer var mı?

Yanıtlar:


21

Bunlar benim farklı mermi tipleri hakkındaki düşüncelerim - maalesef Un * x'in en başından beri yükselişine tanık olmadım (bu kavramın tarihsel olarak iyi bir şekilde genişletildiğini düşünüyorum), bu yüzden lütfen eleştirel olun.

  • Bir sisteme giriş yaptığımda (günümüzde grafik X girişi ile), bir kez çalıştırılması gereken bazı işler olabilir, örneğin bir tür sunucuyla bağlantı kurma, bana bugünün yapılacaklar listesini sunma, bazı komutları otomatik başlatma vb. Yeni bir terminal açtığımda her şey olmamalıydı. Bu nedenle, yalnızca oturum açma kabukları tarafından sağlanan bir dizi yapılandırma dosyası ( ve dahası /etc/profile, ~/.bash_logindoğru bir liste için kılavuza bakın) var .
  • Buna göre, bağlantıları kapatmak, bazı programları sonlandırmak ~/.bash_logout, oturum açma kabuğu var olduğunda orada bir yedekleme komut dosyası çalıştırmak .
  • bu yüzden bir terminalde kullandığım "normal" kabuk bir giriş kabuğu olmamalı, ancak yine de kişisel tercihlerimi okumalı ~/.bashrcçünkü anahtar bağlantılarımın kabukla etkileşim kurmasını istiyorum - bu yüzden bu etkileşimli bir giriş kabuğu.
  • ve son olarak, fakat bash komut dosyası için bash kullanıldığında, bunların hiçbiri önemli değildir. bashmümkün olduğu kadar çabuk başlamalı, yani herhangi bir yapılandırma dosyasını okumamalı. Bu etkileşimli olmayan, giriş yapmayan bir kabuktur .

Öyleyse, sorunuza cevabım Sadece bir tür kabuğumuz olsaydı ne kaybederdik? tek kelimeyle: "Esneklik."


İkinci sorunuza cevap kolaydır:

$-Geçerli seçenek kümesini listeler. Bunlar ya komut satırı parametreleri ile bashya da setyerleşik aracılığıyla ayarlanabilir . Bu yüzden kılavuzdaki iki yere bakmanız gerekir:

  • OPTIONS Bölüm:

    -i        If the -i option is present, the shell is interactive.
  • SHELL BUILTIN COMMANDSbölüm, alt bölüm set:

    -h      Remember the location of commands as they are looked up for execution.  This is enabled by default.
    -m      Monitor  mode.  Job control is enabled.  This option is on by default for interactive shells on systems that sup
            port it (see JOB CONTROL above).  Background processes run in a separate process  group  and  a  line  containing
            their exit status is printed upon their completion.
    -B      The shell performs brace expansion (see Brace Expansion above).  This is on by default.
    -H      Enable !  style history substitution.  This option is on by default when the shell is interactive.

1
Woo: OP'nin açıkça formüle edilmiş sorusuna @mpy cevabının başarılı bir şekilde oldukça yararlı bir tanımlamayı başarabildiğine inanıyorum. Bu konuda: Yani, giriş olmayan bir kabuk sadece giriş kabuğunun bir alt kümesi değil mi?
tuk0z
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.