Pertanyaan Bagaimana cara memeriksa shell mana yang saya gunakan?


Saya membaca bahwa terminal itu tidak lain hanyalah shell, dan Unix menyediakan berbagai macam cangkang:

  • 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 cara memeriksa berapa banyak cangkang yang dipasang?
  • Bagaimana cara mengubah shell yang digunakan dari akun saya?

236
2018-02-28 03:58


asal


Bagaimana cara menentukan shell yang sedang saya kerjakan? di stackoverflow.com - αғsнιη
@KasiyA Ini juga terkait dengan askubuntu.com/questions/87853/… - d a i s y


Jawaban:


Anda dapat mengetikkan perintah berikut di terminal Anda untuk melihat shell mana yang Anda gunakan:

echo $0

Hasilnya akan terlihat seperti di bawah jika Anda menggunakan pesta (Bourne Again Shell) terminal:

-bash

288
2018-02-28 04:03



aku s 0 variabel lingkungan? - Mi_Onim
@Mi_Onim $ 0 adalah nama proses yang sedang berjalan. Jika Anda menggunakannya di dalam shell maka akan mengembalikan nama shell. Jika Anda menggunakannya di dalam skrip, itu akan menjadi nama skrip. - kingmilo
CATATAN: ini tidak akan berfungsi untuk interaktif csh. % echo $0 No file for $0. , tetapi itu berhasil tcsh - Sergiy Kolodyazhnyy
Tidak berfungsi jika ketika salah satunya adalah symlink. Seperti bash sebagai sh - Anwar
@Anwar membuat poin yang bagus, setelah Anda mendapatkan nama shell dari echo $0, ls -l `which <name>`  untuk melihat apakah itu symlinked ke shell binary lain. - JivanAmara


Untuk menemukan shell yang Anda miliki di lingkungan default Anda dapat memeriksa nilai dari SHELL variabel lingkungan:

echo $SHELL

Untuk menemukan contoh shell saat ini, cari proses (shell) memiliki PID dari contoh shell saat ini.

Untuk menemukan PID dari contoh shell saat ini:

echo "$$"

Sekarang untuk menemukan proses memiliki PID:

ps -p <PID>

Menyatukannya:

ps -p "$$"

75
2018-02-28 04:06



$ SHELL adalah shell default untuk sistem (atau pengguna), yang biasanya (tetapi tidak harus) shell yang sebenarnya digunakan pada saat tertentu. - kingmilo
@kingmilo: Benar, jawabannya diubah. - heemayl
Saya menemukan ini sangat berguna ketika beralih ke pengguna melalui 'su - <nama pengguna>', mis. untuk menyiapkan postgres, jenkins, ... - bully
echo $SHELL memberi saya /bin/csh dan ps -p $$ memberi saya 22673 pts/1 00:00:00 bash. Kingmilo menjelaskan (di atas) mengapa mereka tidak sama. - 18446744073709551615
@ 18446744073709551615 Saya belum mengatakan bahwa keduanya sama. Silakan baca jawabannya dengan hati-hati lagi; perhatikan default dan arus susunan kata. - heemayl


$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. Tetapi untuk aplikasi iTerm2 saya, saya menggunakan perintah saat jendela terbuka: /bin/ksh.

Jadi saya $0 memberi saya /bin/ksh di iTerm2. $SHELL memberi saya /bin/bash di iTerm2. $0,$SHELL memberi saya /bin/bash di Terminal


16
2017-11-18 11:45



Ini adalah disambiguasi yang bagus dari jawaban teratas lainnya. Terima kasih. - Michael Hoffmann


Untuk mengetahui mana shell default untuk pengguna Anda, Anda dapat menjalankan:

echo "$SHELL"

Misalnya jika Anda menggunakan Bash, Anda harus mendapatkan output berikut:

/bin/bash

Jika Anda tidak mengubah konfigurasi apa pun, itu harus Bash karena Bash adalah shell default pada Ubuntu.


5
2018-02-28 04:02



/ bin / sh adalah Bahasa Komando Shell dan bukan Bourne Shell, silakan edit jawaban Anda. - kingmilo
@kingmilo Tidak ada /bin/sh referensi dalam jawaban saya - kos
@kol ada sebelum diedit. Perhatikan juga $ SHELL adalah shell default untuk sistem (atau pengguna), yang biasanya (tetapi tidak harus) shell yang sebenarnya digunakan pada saat tertentu. - kingmilo
@kingmilo Harap dicatat bahwa pertanyaannya adalah "ketika saya membuka terminal shell mana yang dibuka secara default ???" dan jawabannya adalah "Jika Anda tidak mengubah konfigurasi apa pun seharusnya Bash, karena itulah shell default pada Ubuntu ", jadi jawabannya sesuai dengan pertanyaan - kos
@kingmilo Membaca jawabannya lagi saya pikir saya mengerti apa kekhawatiran Anda, mungkin saya tidak mengekspresikan diri dengan baik. Saya mengklarifikasi arti "saat ini" dalam jawaban saya - kos


Jawaban lainnya cenderung menggunakan fitur khusus shell, tetapi kami mencoba menemukan shell mana yang kami gunakan, sehingga mereka menganggap jawaban untuk masalah tersebut. Misalnya tidak ada jawaban yang akan bekerja pada ikan.

sh -c 'ps -p $$ -o ppid=' | xargs ps -o cmd= -p

Alih-alih menggunakan sintaks $$ dalam doa sh, tetapi kemudian kami mencari PPID bukan PID. Gunakan PPID untuk menemukan cmd.

sh -c 'ps -p $$ -o ppid=' | xargs -i readlink -f /proc/\{\}/exe

Terima kasih atas peningkatan @muru


2
2018-04-06 04:00



Anda bisa menggunakan ppid=/cmd=untuk menghilangkan header (dan begitu tail -1s), dan pertimbangkan untuk melihat /proc/.../exe untuk melihat file apa yang sedang dijalankan (karena cmd output dapat dimanipulasi oleh apa pun yang menjalankan shell). - muru
Rupanya ini tidak berfungsi di busybox, karena kepatuhan non posix: ref: github.com/broadinstitute/cromwell/pull/… - Evan Benn