私が働いているUNIXのシステム管理者は、ログインシェルをksh
から変更するためのアクセス権を私に与えることに消極的です。 bash
へ 。彼はさまざまな言い訳をしましたが、最も面白いのは、ksh
のすべてのスクリプトを書いているからです。 私がそれらを実行しようとすると、それらは機能しません。彼がこれらのアイデアをどこで得ているのかはわかりませんが、彼を納得させることができないので、私が持っている代替案はありますか?
(chsh
はこれらのマシンにインストールされていますが、ログインにはパブリック/プライベートキーペアを使用しており、パスワードを持っていないため、chsh
パスワードの入力を求められます。パスワードを指定する必要はありません。 )
承認された回答:
ログインすると、ファイル~/.profile
ログインシェル(ksh)によって読み取られます。そのログインシェルに、それ自体をbashに置き換えるように指示できます。いくつかの予防策を講じる必要があります:
- ログインシェルは、インタラクティブな場合にのみ交換してください。これは重要です。そうしないと、グラフィックモードでのログインが機能しない場合があります(これはシステムに依存します。すべてではありませんが、一部のシステムは
~/.profile
を読み取ります。 xdmなどを介してログインする場合)、およびssh foo '. ~/.profile; mycommand'
失敗します。 - bashが使用可能であることを確認して、何らかの理由で実行可能ファイルが存在しない場合でもログインできるようにします。
ログインシェルとしてbashを実行するかどうかを選択できます。ログインシェルにすることの唯一の大きな違いは、~/.bash_profile
をロードすることです。 または~/.profile
。したがって、ログインシェルとしてbashを実行する場合は、~/.bash_profile
を使用するように十分に注意してください。 または、~/.profile
からbashを再帰的に実行しないように注意してください 。 ~/.profile
を持つことの本当の利点はありません kshではなくbashによって実行されるため、実行しないことをお勧めします。
SHELL
も設定します ターミナルエミュレータなどのプログラムがそのシェルを呼び出すように、環境変数をbashに設定します。
bashに切り替えるコードは次のとおりです。 ~/.profile
の最後に配置します 。
case $- in
*i*)
# Interactive session. Try switching to bash.
if [ -z "$BASH" ]; then # do nothing if running under bash already
bash=$(command -v bash)
if [ -x "$bash" ]; then
export SHELL="$bash"
exec "$bash"
fi
fi
esac