現在実行中のコマンドと現在のパスをXtermウィンドウのタイトルに切り替えるにはどうすればよいですか?

現在実行中のコマンドと現在のパスをXtermウィンドウのタイトルに切り替えるにはどうすればよいですか?

2つの状態を切り替えるためにXtermウィンドウのタイトルを設定したいと思います。

  • コマンドが実行されると、コマンド名が表示されます(例:「less」)。
  • 実行中のコマンドがない場合は、現在のパスを表示します(例: "src")

現在のパスを使用してXtermウィンドウのタイトルを作成できます。

$ export PROMPT_COMMAND='echo -ne "\033]0;`basename ${PWD}`\007"'

私が見せることができます現在実行中のコマンドtrapステートメントを追加すると、次のようになります.bashrc

$ trap 'echo -ne "\033]0;$BASH_COMMAND\007"' DEBUG

ただし、2つを自動的に切り替えることはできません。可能ですか?

編集する:@テデン通常のxtermで動作するソリューションを示しています。本当に素敵です!しかし、私がMacOSX Terminal.appを使用しているという事実は言及していません。コマンドが実行されない場合は、現在のパスの代わりに「bash」が表示され続けるようにマークされます。少し触ってくださいこの問題を解決する方法を見つけました。

ベストアンサー1

$BASH_COMMAND設定されていることを確認し、設定されていない場合は、CWDを印刷する機能を使用することで可能です。次の行を次の項目に追加します~/.bashrc

trap 'echo -ne "\033]0;$BASH_COMMAND\007"' DEBUG
function show_name(){ 
    if [[ -n "$BASH_COMMAND" ]]; 
    then 
    echo -en "\033]0;`pwd`\007"; 
    else 
    echo -en "\033]0;$BASH_COMMAND\007"; 
    fi 
}
export PROMPT_COMMAND='show_name'

これにより、端末名が現在実行中のコマンド(存在する場合)または現在のディレクトリ(存在しない場合)になります。コマンドを複数回実行する長いループを実行すると、少し分かりやすい端末が発生することに注意してください。while true; do echo foo; doneたとえば、試してみてください。

zsh源泉)ループを正しく処理します。

case $TERM in
    xterm*)
      preexec () {
        print -Pn "\e]0;$*\a"
      }
    ;;
esac

おすすめ記事