SHELL環境変数を設定する際に驚くべきことはありますか?

SHELL環境変数を設定する際に驚くべきことはありますか?

私はmacOSを使用していますが、Bash 3.2が付属しているので、homebrewを介して4.4にアップグレードしました。起動コマンドを次のように設定して、最新バージョンを使用するように端末を設定しました。

/usr/local/bin/bash -l

script最近、ターミナルセッションを録音して再生するためのコマンドで遊んで、Bash 3.2を使用していることがわかりました。

設定するとexport SHELL=/usr/local/bin/bash問題が解決しますが、設定を推奨するかどうか疑問に思います。私の考えではこれは望ましくないかもしれません。いいえSHELL設定するには、環境変数に基づいて何を決定するのかわかりません。

答え1

環境変数の一般的な意味SHELLは、ユーザーが好む対話型シェルです。特定の構文(Bourneのようにする必要はありません)があり、特定のコマンドライン構文(たとえば、サポートする必要があります-cSHELLSHELL

テキストモード(テキストコンソールまたはSSH経由)でログインすると、次のような結果が得られます。ログインシェルユーザーデータベースに一覧表示されます(例/etc/passwd:)。 GUI環境で端末を開くときにSHELL環境変数が設定されていると、環境変数で指定されたシェルが表示されます。テキストモードログインに同じシェルを使用するには、chshログインシェルを使用または変更します。ログインシェルをお気に入りのシェルに切り替えます。exec

$SHELL -csh -c時には、コードを実行するのではなく、sh構文を使用するプログラムに会うことがあります。しかし、このような状況は非常にまれです。技術的には、これはPOSIXで許可されていますが、歴史的使用法に違反しています。実際、設定はSHELL安全です。私はログインシェルを設定しており、約20年間ほとんどの/bin/shコンピュータにSHELL設定してきました。/path/to/zsh

関連情報