再起動時に画面セッションを開始するように(cron経由で)構成されたマシンがあります。セッションはいくつかの画面を開き、そのうちの1つでサーバーを起動します。これはすべて正常に機能します。ただし、ログインして画面セッションを再開すると、次のような(PS1)プロンプトが表示されます。
\u@\h [\j] \w\$
ターミナルカラーも表示されません。これは、bashrcファイルに明示的に設定したPS1
文字列ですが、\u
のような制御シーケンスはシェルによって解釈されていません。画面が開始する前に、bashrcとプロファイルがインポートされることを確認しました。 cronから呼び出されたスクリプト:
#! /bin/bash
# This script initializes screen with a propert environment. It is intended to
# be run from cron.
# source the profile
if [ -r "$HOME/.profile" ]; then source "$HOME/.profile"; fi
if [ -r "$HOME/.bash_profile" ]; then source "$HOME/.bash_profile"; fi
if [ -r "$HOME/.bashrc" ]; then source "$HOME/.bashrc"; fi
exec screen -dmS initscreen
「export TERM=screen.xterm-256color
」という行とそのバリエーション(export TERM=xterm-256color
など)を追加しようとしましたが、何も変わりませんでした。
私の想定では、再起動時に画面が開始されたときに実際のTTYがないため、どういうわけか画面が端末を正しく解釈できず、端末の解釈なしで起動してしまいます。画面を終了し、(再起動時にcronからではなく)sshセッションから起動スクリプトを再実行すると、すべてが正常に機能します。これらの端末機能が機能している状態で後で画面を接続できるように、再起動時に画面を起動するにはどうすればよいですか?
前もって感謝します。
\w
のPS1
のような魔法の文字が解釈されていないという事実は、画面で開始されたシェルがbash
ではなく、/bin/sh
のような単純なものであることを示唆しているようです。渡さなければならなかったシステムの1つで/etc/crontab
を調べたところ、次の行がありました。
Shell=/bin/sh
最初は別のディストリビューションにShell=/bin/bash
があったので、一貫した結果を確実に得るには、おそらくこれをどこかに明示的に設定する必要があります。