Solution for “xterm: Cannot use ‘bash’ as shell: No such file or directory”

会社のPCでxinitコマンドを実行してGUIを起動すると以下のメッセージが端末に表示されていた。

xterm: Cannot use 'bash' as shell: No such file or directory

特に動作に問題はなかったので放置していたが,気になったので原因を調べた。

この現象はGNU screen起動後にxinitコマンドを実行したら起こっていた。そこで,GNU Screen起動中のSHELL環境変数を確認すると値がbashになっていた。おそらくこれが原因だろう。

現在screenコマンドは,~/.bashrcで以下のようにaliasを設定していた。

MYSHELL=$([ "$(command -v zsh)" ] && command -v zsh || command -v bash)
MYTERM=$([ -z "${TERM##*256*}" ] && echo screen-256color || echo screen)
alias screen="screen -T $MYTERM -s $MYSHELL"

ここでは-sオプションで,zshがあればGNU Screenの起動時のシェルをzsh,なければbashになるようにしていた。どうやら,この-sオプションで指定した値は,GNU Screen起動中の環境変数SHELLの値として設定されるようだ。この値には使用するシェルコマンドのフルパスを指定しないとだめなようだ。そこで,以下のように設定を変更した。

: ${MYSHELL:=$(command -v zsh )}
: ${MYSHELL:=$(command -v bash)}

MYTERM=$([ -z "${TERM##*256*}" ] && echo screen-256color || echo screen)
alias screen="screen -T $MYTERM -s $MYSHELL"

MYSHELL変数が設定されていなければ,command -vコマンドの実行結果を設定するようにした。command -vコマンドでは引数に指定したコマンドが存在すれば,そのフルパスを返し,なければ何も返さないコマンドだ。

これで解決した。エラーが消えてすっきりしてよかった。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です