Mengapa $ SHELL tidak berubah ketika saya menjalankan shell baru?

14
 $ echo $SHELL
/bin/bash
 $ /bin/ksh93
 $ echo $SHELL
/bin/bash
 $ file /bin/ksh93
/bin/ksh93: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), 
dynamically linked (uses shared libs), for GNU/Linux 2.6.8, stripped

 $ getent passwd test111
test111:x:1008:1008:,,,:/tmp:/bin/ksh93
 $ ssh test@localhost
test@localhost's password:
 $ echo $SHELL
/bin/ksh93
 $ bash
 $ echo $SHELL
/bin/ksh93

Saya berharap $SHELLuntuk berubah setelah menjalankan shell lain. Kenapa tidak?

PS Namun shell tidak berubah, hanya variabel $ SHELL tetap sama:

 $ dash
 $ echo $SHELL
/bin/bash
 $ T=test ; [[ $T = *est ]] && echo ok
dash: [[: not found
buru-buru
sumber
2
gunakan echo $0untuk mendapatkan shell saat ini
Manula Waidyanatha

Jawaban:

13

Anda seharusnya tidak mengharapkan variabel ini berubah. Ini digunakan untuk menyimpan path ke shell default Anda, yaitu yang disimpan dalam basis data kata sandi, bukan shell yang sedang Anda jalankan.

Jlliagre
sumber
8

SHELLadalah ditentukan oleh POSIX . Mengutip:

SHELL Variabel ini harus mewakili pathname dari penerjemah bahasa perintah yang disukai pengguna. [...]

Menjalankan shell yang berbeda tidak selalu mengindikasikan perubahan dalam preferensi pengguna.

Adalah baik untuk mempelajari jenis-jenis hal yang ditentukan POSIX dan ke mana harus mencarinya karena kebanyakan sistem * .nix bertujuan untuk kepatuhan POSIX. Variabel lingkungan adalah salah satunya.

Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
sumber
-3

Variabel SHELL menyimpan shell induk untuk sesi Anda, yang terkadang cocok dengan shell login default Anda . $ SHELL adalah shell induk yang memunculkan sesi saat ini.

jadi, jika saya menggunakan bash untuk pengguna saya dan melakukan ini:, chsh -s /bin/zsh userketika saya melakukannya echo $SHELL, shell yang ditampilkan masih akan BASH.

lihat artikel ini .

fromnaboo
sumber
4
Artikel yang Anda tautkan tidak benar. Itu sebaliknya, yaitu SHELL menyimpan shell login default Anda (pada waktu login terakhir) yang kadang-kadang cocok dengan shell orangtua Anda. Variabel ini tidak pernah dimodifikasi oleh orang tua atau shell Anda saat ini. Satu-satunya tindakan yang mungkin mereka lakukan adalah mengaturnya jika (tidak terduga) tidak disetel.
jlliagre