$ 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
$SHELL
他のシェルを実行した後に変更されることを願っています。なぜできないの?
PS ただし、シェルは変更されますが、$SHELL 変数だけは変更されません。
$ dash
$ echo $SHELL
/bin/bash
$ T=test ; [[ $T = *est ]] && echo ok
dash: [[: not found
答え1
この変数が変更されると予想してはいけません。現在実行中のシェルではなく、パスワードデータベースに格納されているパスであるプライマリシェルへのパスを保存するために使用されます。
答え2
SHELL
はいPOSIXで指定。引用:
SHELL この変数は、ユーザーが好むコマンド言語ソルバーのパス名を表す必要があります。 [...]
別のシェルを実行しても必ずしもユーザー設定が変更されるわけではありません。
ほとんどの* .nixシステムはPOSIXと互換性があるように設計されているため、POSIXが指定する項目の種類とそれを検索する場所を知ることをお勧めします。環境変数もその一つです。
答え3
SHELL可変ストレージセッションの親シェル(時にはデフォルトのログインシェルと一致する)。 $ SHELLは現在のセッションを作成した親シェルです。
したがって、私のユーザーにbashを使用して次のことを行うと、これを実行したchsh -s /bin/zsh user
ときにecho $SHELL
表示されるシェルはまだありますBASH
。
バラよりこの記事。