Apa shell standar untuk terminal?

51

Katakanlah, saya membuka terminal dan memasukkan / menjalankan beberapa perintah shell.

Tapi saya tidak meminta Bash atau shell lain secara eksplisit.

Shell apa yang digunakan secara default?

DrStrangeLove
sumber

Jawaban:

51

Yang ditentukan pada baris Anda di /etc/passwd(itu adalah :baris yang terpisah dan shell adalah yang terakhir).

Misalnya milik saya:

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

Ini dia /bin/bash(default Ubuntu)

Anda juga dapat menggunakan chsh:

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

Ini memberi tahu saya bahwa shell saya adalah /bin/bashdan membiarkan saya mengubahnya.

Akhirnya, echo $SHELLakan melakukan hal yang sama:

$ echo $SHELL
/bin/bash
Cesium
sumber
jika itu bash, mengapa kadang-kadang dipanggil secara eksplisit seperti sudo bash -c "netstat -an | grep LISTEN | grep -v ^ unix" ??
DrStrangeLove
Saya pikir itu perintah yang buruk secara pribadi - tidak ada yang bahkan membutuhkan root. Jika melakukannya , itu akan lebih baik ditulis sebagai sudo netstat -an | grep LISTEN | grep -v ^unix. Saya tidak melihat alasan untuk menyertakannya dalam subshell bash.
Cesium
2
@DrStrangeLove: Jika lebih dari satu perintah dalam pipa memerlukan izin root, maka sudo bash -c "..."akan memastikan bahwa seluruh pipa dieksekusi oleh root.
Keith Thompson
Jika Anda tidak tahu perintah mana yang membutuhkan root (dan mengapa), Anda seharusnya tidak menjalankannya. Kalau tidak, mengapa mempercayai perintah / program / skrip apa pun lebih dari yang dibutuhkan. Jika Anda tidak bisa commandA | sudo commandB | commandC, Anda bisa melakukan yang sudo idpertama (menjalankan idperintah sebagai root, tetapi juga memperoleh token " use sudo without password prompt " yang berlangsung selama 15 menit (default) 15 menit.
waltinator
2
Jika Anda menggunakan chshmaka Anda harus keluar dan masuk kembali untuk melihat perubahan ini.
Neil Traft
17

GNU Bash adalah shell yang digunakan secara default di terminal di Ubuntu. Namun ketika skrip dieksekusi pada boot sistem maka dash digunakan, karena dash adalah / bin / sh.

Ini didefinisikan dalam variabel lingkungan $ SHELL. Anda dapat memeriksa dengan mengetik echo $SHELLdi terminal.

Anonim, tanpa nama
sumber
14

mengetikkan yang berikut ini akan menampilkan shell apa yang dibuka terminal:

echo $SHELL

Namun, untuk mengetahui cangkang apa yang Anda gunakan saat ini (Anda mungkin telah mengubahnya) ketik

ps -p $$

mis. Anda akan melihat bahwa shell adalah bash pada contoh output

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

Metode lain adalah menggunakan

echo $0

ini hanya akan mengembalikan nama shell saat ini.

kebebasan fosil
sumber
+1 untuk kesederhanaanecho $0
djthoms
Jawaban bagus! Terima kasih, untuk beberapa alasan echo $ SHELL tidak berfungsi (selalu menggunakan yang itu) dan dua alternatif Anda berhasil. Terima kasih!
wolfdawn
3

Secara default itu bash:

env | grep ^SHELL=

Dalam kebanyakan kasus akan menghasilkan

SHELL=/bin/bash
wojox
sumber
Belum tentu. Jika Anda membuat pengguna baru useradd, defaultnya adalah sh. $ useradd -D|grep SHELL SHELL=/bin/sh.
Sparhawk
+1, karena meskipun jawaban yang dipilih membutuhkan lebih sedikit pengetikan, selalu menyenangkan memiliki lebih dari satu cara untuk melakukan sesuatu.
2

Untuk mendapatkan path file yang dapat dieksekusi, shell dapat digunakan

readlink -f /proc/$$/exe

Beberapa kemungkinan keluaran adalah:

  • /bin/bash
  • /usr/bin/bash
  • /usr/bin/zsh
  • /home/stan/.linuxbrew/Cellar/zsh/5.2/bin/zsh
Victor Yarema
sumber