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?

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

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.


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.


+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

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.