$ 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 $SHELL
untuk 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
shell
environment-variables
buru-buru
sumber
sumber
echo $0
untuk mendapatkan shell saat iniJawaban:
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.
sumber
SHELL
adalah ditentukan oleh POSIX . Mengutip: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.
sumber
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 user
ketika saya melakukannyaecho $SHELL
, shell yang ditampilkan masih akanBASH
.lihat artikel ini .
sumber