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

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.


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.


-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 .


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
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.