Saya membaca bahwa terminal tidak lain adalah shell, dan Unix menyediakan rasa berbeda dari shell:
- Bourne shell (sh)
- C shell (csh)
- TC shell (tcsh)
- Korn shell (ksh)
- Bourne Again shell (bash)
Pertanyaan:
- Ketika saya membuka jendela terminal, shell mana yang dibuka secara default?
- Bagaimana saya memeriksa berapa banyak kerang yang dipasang?
- Bagaimana cara saya mengganti shell yang digunakan dari akun saya?
command-line
Pembelajar969
sumber
sumber
Jawaban:
Anda dapat mengetik perintah berikut di terminal Anda untuk melihat shell mana yang Anda gunakan:
Hasilnya akan terlihat mirip dengan di bawah ini jika Anda menggunakan terminal bash ( Bourne Again Shell ):
sumber
0
variabel lingkungan?csh
.% echo $0 No file for $0.
, tapi itu berhasiltcsh
bash
assh
echo $0
,ls -l `which <name>`
untuk melihat apakah itu disinkronkan ke biner shell lain.Untuk menemukan shell yang Anda miliki di lingkungan default, Anda dapat memeriksa nilai
SHELL
variabel lingkungan:Untuk menemukan instance shell saat ini, cari proses (shell) yang memiliki PID instance shell saat ini.
Untuk menemukan PID dari instance shell saat ini:
Sekarang untuk menemukan proses memiliki PID:
Menyatukannya:
sumber
echo $SHELL
memberi saya/bin/csh
danps -p $$
memberi saya22673 pts/1 00:00:00 bash
. Kingmilo menjelaskan (di atas) mengapa mereka tidak sama.$SHELL
memberi Anda shell default.$0
memberi Anda shell saat ini.Sebagai contoh: Saya memiliki bash sebagai shell default saya, yang saya gunakan untuk Aplikasi Terminal saya. Tapi untuk aplikasi iTerm2 saya, saya menggunakan perintah sebagai jendela terbuka:
/bin/ksh
.Jadi saya
$0
memberi saya/bin/ksh
di iTerm2.$SHELL
memberi saya/bin/bash
di iTerm2.$0
,$SHELL
beri saya/bin/bash
di Terminalsumber
bash
di terminal. Untuk beralih kembali ke zsh, ketikzsh
Untuk mengetahui yang merupakan shell default untuk pengguna Anda, Anda dapat menjalankan:
Misalnya, jika Anda menggunakan Bash, Anda harus mendapatkan output berikut:
Jika Anda tidak mengubah konfigurasi apa pun, itu pasti Bash karena Bash itu adalah shell default di Ubuntu.
sumber
/bin/sh
referensi dalam jawaban saya$$
variabel sebenarnya didefinisikan oleh POSIX dan akan bekerja pada sebagian besar kerang. Fish telah memutuskan untuk tidak mengikuti standar di sini jadi saya pikir adil untuk mengabaikannya. Saya dapat mengonfirmasi bahwa$$
berfungsi seperti yang diharapkan di sh, dash, bash, zsh, ksh, ash, tcsh dan csh. Bahkan, dari atas kepala saya, saya tidak bisa memikirkan cangkang lain kecuali ikan yang tidak berfungsi.Jawaban lain cenderung menggunakan fitur spesifik shell, tetapi kami berusaha menemukan shell yang kami gunakan, sehingga mereka mengambil jawaban untuk masalah tersebut. Misalnya tidak ada jawaban yang akan berhasil pada ikan.
Alih-alih menggunakan sintaks $$ dalam doa sh, tetapi kemudian kami mencari PPID bukan PID. Gunakan PPID untuk menemukan cmd.
Terima kasih untuk peningkatan @muru
sumber
ppid=
/cmd=
untuk menghilangkan header (dan jugatail -1
s), dan mempertimbangkan/proc/.../exe
untuk melihat untuk melihat file apa yang sedang dijalankan (karenacmd
output dapat dimanipulasi oleh apa pun yang menjalankan shell).Posting asli menanyakan tiga pertanyaan. Jawaban yang diberikan mencakup pertanyaan pertama, "Ketika saya membuka jendela terminal, shell mana yang dibuka secara default?" Mereka juga menjawab pertanyaan yang TIDAK diajukan, yaitu "Bagaimana saya bisa mengetahui shell mana yang sedang berjalan di terminal?" Namun, sejauh yang saya bisa lihat, tidak ada yang menjawab pertanyaan kedua atau ketiga yang awalnya diajukan, yaitu "Bagaimana cara memeriksa berapa banyak shell yang dipasang?" dan "Bagaimana cara saya mengganti shell yang digunakan dari akun saya?"
cat / etc / shells
Misalnya, pada instalasi default Ubuntu 18.10 ini memberikan:
# / etc / shells: shell login yang valid
/ bin / sh
/ bin / dash
/ bin / bash
/ bin / rbash
Namun, secara default sh adalah tautan simbolis ke dasbor, sedangkan rbash menghubungkan ke bash dengan opsi -r ("bash terbatas") sehingga sebenarnya hanya ada dua shell, bukan empat seperti yang ditunjukkan daftar di atas. Perintah berikut akan menunjukkan kepada Anda apakah salah satu dari shell yang terdaftar sebenarnya adalah tautan simbolik, dan jika demikian di mana mereka terhubung ke: ls -l / bin
sumber