ユーザーアカウントに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
~/.profile
bash
~/.profile