Bir dizine gidip "Terminalde Aç" ı seçerek Ctrl+ Alt+ Tve farklı bir terminal kullanarak Ubuntu'da bir terminal açtım .
Her echo $0
iki durumda da yaptım .
İlk durumda:
$ echo $0
-bash
İkinci durumda:
$ echo $0
/bin/bash
Neden bu fark?
Bir dizine gidip "Terminalde Aç" ı seçerek Ctrl+ Alt+ Tve farklı bir terminal kullanarak Ubuntu'da bir terminal açtım .
Her echo $0
iki durumda da yaptım .
İlk durumda:
$ echo $0
-bash
İkinci durumda:
$ echo $0
/bin/bash
Neden bu fark?
Yanıtlar:
echo $0
Komutun çıktısı, oturum açma kabuğu olarak çağrıldığı -bash
anlamına gelir bash
. Çıktı sadece ise bash
, o zaman oturum açma olmayan bir kabuktasınız demektir.
man bash
126. satırda bir yerde şöyle diyor:
A login shell is one whose first character of argument zero is a -, or one started with the --login option.
Burada daha fazla bilgi bulabilirsiniz: Login Shell ile Login Olmayan Shell arasındaki fark? .
Şimdi, /bin/bash
ikinci durumda neden aldığınızı açıklamak için , bir programın (sizin durumunuzda dosya yöneticiniz, muhtemelen nautilus) veya bir komut dosyasının kendi $0
başını başka bir şeye değiştirebileceğini söyleyebilirim . Örneğin $0
, terminalimde neler olduğunu görün (her zaman aynı terminal):
Fark, bunların başlatılma şekline bağlıdır. bash, argv [0] 'a bağlı olarak farklı şekilde başlatılır (farklı başlangıç komut dosyalarını oku). Dize -
, içinde olduğu gibi kısa çizgi ile başlıyorsa, bir -bash
giriş kabuğu olarak çalışır, değilse, etkileşimli bir kabuk olarak çalışır. Ayrıca etkileşimli olmayan bir kabuk olarak da çalışabilir (yani bir kabuk komut dosyasında).
Daha fazla bilgi edinmek için el kitabını, man bash
İNVOKASYON bölümünü okumak en iyisidir .
Bir kabuk, oturum açtığınızda başlatılır, ancak aynı zamanda make
, bir kabuk komut dosyası çalıştırdığınızda veya yazdığınızda veya yeni bir terminal penceresi oluşturduğunuzda da başlatılır .:sh
vi
Başlangıçta, ~/.profile
oturum açtığınızda veya koştuğunuzda kabuk okunur su
. Bu komut dosyası, yeni e-postanızın olup olmadığını duyurmak, silme ve öldürme karakterlerinizi özelleştirmek ve TERM ve PATH değişkenlerini ayarlamak ve vermek gibi şeyler yapar. Neredeyse başka bir bağlamda başlatıldığında, kabuk okumadı ~/.profile
, çünkü bunların çoğunu yapmak gereksiz olurdu. Önemli kabuk değişkenlerini yeni kabuğa aktarmanız bekleniyordu.
Kabuğun okumayı okuyup okumadığını bilme şekli ~/.profile
ilk karakterinin argv[0]
, yani ilk karakterin olup olmadığını kontrol $0
etmekti '-'
.
Başlangıç olarak csh
, takma adlar tanıtıldı. Takma adlar çevreye ihraç edilmedi. csh
iki farklı başlatma komut dosyasını okumak üzere tasarlanmıştır. ~/.login
yalnızca bir kullanıcı oturum açtığında okundu ve bunun için ipucu argv[0]
başladıysa idi '-'
. ~/.cshrc
kabuk her başlatıldığında okundu. Genel olarak, biri diğer adları ~/.cshrc
ve diğer her şeyi yerleştirdi ~/.login
. csh
Ayrıca ~/.logout
çoğu durumda ekranı temizledi ve koştu fortune
.
Diğer mermiler de aynı özellikleri benimsedi. ksh
okur ~/.kshrc
, bash
okur ~/.bashrc
ve takma ad tanımlarınızı koyacağınız yerlerdir.
Yani, uzun bir hikaye kısa yapmak için, bir kabuk üreten uygulama onun bir "giriş kabuğu" olup olmadığına karar verir, bu durumda '-'
başlangıçta veya düzenli bir kabuk var. Çoğu durumda, etkileşimli olacak bir kabuk bir giriş kabuğu olarak başlatılır ve yalnızca komutları bağımsız değişkenler veya bir komut dosyasından çalıştırmak için kullanılan bir kabuk başlar ve sonra çıkış normal bir kabuktur.
Ancak her şey, kabuğun başlangıcını başlatan uygulamanın hevesidir.