私が働いているUNIXシステム管理者は、ログインシェルをksh
からbash
に変更するアクセス権を与えることに消極的です。彼はさまざまな言い訳をしてきましたが、おもしろいのは、ksh
のすべてのスクリプトを記述しているので、実行しようとしても機能しないことです。私は彼がこれらのアイデアをどこで手に入れているのかわかりませんが、私は彼を説得することができないので、私に代案はありますか?
(これらのマシンにはchsh
がインストールされていますが、ログインには公開鍵と秘密鍵のペアを使用しているため、パスワードがありません。そのため、chsh
からパスワードの入力を求められてもそれを与える。 )
ログインすると、ファイル_~/.profile
_がログインシェル(ksh)によって読み取られます。そのログインシェルに、自分自身をbashに置き換えるように指示できます。いくつかの予防策を講じる必要があります。
~/.profile
_を読み取るわけではありません))、および_ssh foo '. ~/.profile; mycommand'
_などのイディオム失敗します。ログインシェルとして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
_
これは少し面倒ですが、ホームディレクトリに.profile
ファイルを作成して、ログイン時にbash
をシェルとして使用できます。
Shell=`type -P bash`
exec bash -l
これにより、ksh
セッションがbash
セッションに置き換えられます。ログインするたびに新しいexit
セッションを手動で開始する場合のように、bash
(または^D
)を2回入力する必要はありません。
echo $Shell
bash
へのパスも返します。
Gilesの回答には、bashの実行時に-lフラグを追加する必要があります。これにより、すべてのログインプロファイルスクリプトが新しいbashシェルで提供されます。 (たとえば、RHELの/etc/profile.d/にあるもの)。スクリプトは次のようになります。
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" -l
fi
fi
esac
@Gillesの上位投票に触発されたcsh/tcsh
の回答は、
if ( ! $?BASH ) then
setenv BASH `command -v bash`
endif
if ( $?prompt ) then
if ( -x "$BASH" ) then
exec "$BASH"
endif
endif
Solaris:
usermod -s /bin/bash root