kshがシェルの場合はbashを使用してください。

kshがシェルの場合はbashを使用してください。

ユーザーアカウントにActive Directoryを使用し、ホームディレクトリにNFSマウントを使用する複数のRHELシステムにアクセスできます。

私たちのログインシェルはActive Directoryに保存されており、常に利用可能です/bin/ksh。私はこれを永遠にしたい/bin/bashので、.NETでこれを実装できると思いました~/.profile。こことSOに関するいくつかの記事を読んだ後、次の結論を下しました。

if [ ! -n "$BASH" ] ;then
    SHELL=`type -P bash`
    exec bash -l;
fi
  • これが標準/良い方法ですか?
  • ! -n "$BASH"私はそれを次のように読んだ。NOT ("$BASH" is NOT null)
    • だからtrue空であればfalse空でなければ。
    • それでは、なぜそれだけで-z "$BASH"さえもしないのですか! "$BASH"

答え1

表示されるコードは、ファイルbashからログインシェルを起動するために使用される可能性が高いです~/.profile。個人的には、commandこれが次のように存在することを確認したいと思いますbash

if [ -z "$BASH" ]; then
    shell=$( command -v bash )
    if [ -n "$shell" ]; then
        exec env SHELL="$shell" bash --login
    fi
    unset shell
    echo 'Bash not present, continuing...' >&2
fi

bashこれは、パスを取得して使用可能かどうかを$shellテストするために使用されます。bashそしてSHELL環境変数を設定しますbash

[ ! -n "$BASH" ]使用するかどうかは重要ではありません[ -z "$BASH" ]。したがって、正しいと感じ、読みやすいものを使用してください。いいえ! [ "$BASH" ]またはを使用してください[ ! "$BASH" ]。通常、ダッシュで始まる文字列をテストしてテストが混乱する可能性があるため、-n文字列が空であるかどうかをテストするときまたは使用することをお勧めします。-z

~/.profileある日、システム管理者が削除し、bash代わりに別々のファイルを作成することにした場合は、デフォルトで~/.bash_profile同じままにしたい場合があります(上記を除く)。使用可能な場合はbashシェルが代わりに使用され、起動に失敗したために bashism に問題が発生せず、デフォルトのログインシェルが正常に使用されます。~/.bash_profile~/.profilebash~/.profile

関連情報