Bashのプロンプトを変えずにscreenのウィンドウタイトルだけ変える

スポンサーリンク

先にコード例。.bashrcに書きます。

if [ $TERM == 'screen' ]; then
  export PROMPT_COMMAND='printf "\033k%s:%s\033\134" "${USER}" "`basename \"${PWD/#$HOME/~}\"`"'
fi

この例ではウィンドウ名が「ユーザー名:カレンドディレクトリ名($HOMEなら~表記)」となります。
kと\033の間の部分を好きなように変えてください。
if文で端末がscreenの時のみPROMPT_COMMANDが設定されます。

以下説明。

screenのウィンドウ名はデフォルトだと$PS1のプロンプトが表示されるので、幅を取りすぎな時がありますよね。
でもシェルに表示されるPS1は弄らずにウィンドウタイトルだけ変えたい。そんな時はエスケープシーケンスの送信によってscreenのウィンドウタイトルを変えることができるようです。以下man screenよりタイトル命名についての引用。

対話的に行うには、タイトル文字列用エスケープシーケンス (<esc>kname<esc>)と “title” コマンド(C-a A)がある。 前者をアプリケーションから出力させれば、 ソフトウェア制御でウィンドウの名前を変更できる。

PROMPT_COMMAND環境変数に設定されたコマンドは、プロンプトが表示される前に毎回実行されます。\033と\134は8進法でエスケープとバックスラッシュに相当します。
後は最初のコードみたいな感じでprintfを使ってkの後に好きなように文字列を設定します。

ちなみに${PWD/#$HOME/~}にある変数の後のスラッシュとかシャープ(ハッシュ)マークとかの意味は、Bashの文字列操作表記で$PWDの前方が$HOMEに当てはまったら~に置換するという機能のようです。(参考

参考:
PS1とPROMPT_COMMAND, GNU screenでの活用も

スポンサーリンク
スポンサーリンク
LinuxRecord
フォローする
Akashic Records

コメント

タイトルとURLをコピーしました