Terminal için varsayılan kabuk nedir?


51

Diyelim ki bir terminal açtım ve bazı kabuk komutları girdim / yürüttüm.

Ama açıkça Bash'i veya başka bir kabuğu çağırmadım.

Hangi kabuk varsayılan olarak kullanıldı?

Yanıtlar:


51

Satırınızda belirtilen satır /etc/passwd( :ayrılmış satır ve kabuk son satırdır).

Mesela benimki:

chris:x:1000:1000:Chris,,,:/home/chris:/bin/bash

İşte /bin/bash(Ubuntu varsayılanı)

Ayrıca şunları da kullanabilirsiniz chsh:

$ chsh
Password: 
Changing the login shell for chris
Enter the new value, or press ENTER for the default
        Login Shell [/bin/bash]:

Bu bana benim kabuğum olduğunu /bin/bashve değiştirmeme izin verdiğini söylüyor.

Sonunda, echo $SHELLaynısını yapacağız:

$ echo $SHELL
/bin/bash

eğer bash ise, neden bazen açıkça sudo bash -c "netstat -an | grep LISTEN | grep -v ^ unix" ?? gibi çağrılır?
— DrStrangeLove

Bence kişisel olarak kötü bir komut - bunların hiçbiri kök gerektirmiyor. O Eğer yaptığımız , daha iyi olarak yazılabilir olur sudo netstat -an | grep LISTEN | grep -v ^unix. Bunu bir bash subshell içine yerleştirmek için bir sebep görmüyorum.
— Sezyum

2
@DrStrangeLove: Boruda birden fazla komut kök izinlerine ihtiyaç duyuyorsa sudo bash -c "...", tüm borunun kök tarafından çalıştırılmasını sağlar.
— Keith Thompson,

Hangi komutların root gerektirdiğini bilmiyorsanız (ve neden), bunları çalıştırmamalısınız. Aksi halde, neden herhangi bir komut / program / komut dosyasına gerekenden daha fazla güvenin. Bunu yapamazsanız commandA | sudo commandB | commandC, sudo idilkini yapabilirsiniz ( idkomutu çalıştırır root, ancak aynı zamanda 15 dakika süren (varsayılan) 15 dakika süren bir " parola olmadan sudo kullan " belirteci de alır.
— waltinator

2
Eğer kullanırsanız chsho zaman sen çıkış yapıp tekrar giriş gerekir bu değişikliği görmek için.
— Neil Traft

17

GNU Bash, Ubuntu'daki terminallerde varsayılan olarak kullanılan kabuktur. Ancak betikler sistem önyüklemesinde yürütüldüğünde, tire / bin / sh olan çizgi kullanılır.

Bu $ SHELL çevre değişkeninde tanımlanmıştır. echo $SHELLTerminalde yazarak kontrol edebilirsiniz .


14

aşağıdakini yazmak, terminalin hangi kabuğu açtığını gösterecektir:

echo $SHELL

Ancak, şu anda hangi kabukta olduğunuzu öğrenmek için (onu değiştirmiş olabilirsiniz)

ps -p $$

Örneğin, kabuğun örnek çıktıda bash olduğunu göreceksiniz

  PID TTY          TIME CMD
 3500 pts/0    00:00:01 bash

Başka bir yöntem kullanmaktır

echo $0

bu sadece geçerli kabuğun adını döndürür.


Sadelik için +1echo $0
— djthoms

Mükemmel cevap! Teşekkürler, nedense echo $ SHELL işe yaramadı (her zaman birini kullandı) ve iki alternatifiniz işe yaradı. Teşekkürler!
— wolfdawn

3

Varsayılan olarak bu bash:

env | grep ^SHELL=

Çoğu durumda üretecek

SHELL=/bin/bash

Şart değil. İle yeni bir kullanıcı oluşturursanız useradd, varsayılan olarak sh. $ useradd -D|grep SHELL SHELL=/bin/sh.
— Sparhawk

+1, çünkü seçilen cevap daha az yazmaya ihtiyaç duysa da, bir şeyi yapmanın birden fazla yolu olması her zaman güzeldir.

2

Yürürlükteki kabuk çalıştırılabilir dosya yolunu kullanmak için

readlink -f /proc/$$/exe

Bazı olası çıktılar:

  • /bin/bash
  • /usr/bin/bash
  • /usr/bin/zsh
  • /home/stan/.linuxbrew/Cellar/zsh/5.2/bin/zsh
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.