
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
答え2
私は気づいたMacOSX Terminal.appで.bashrcを読み取ることができません。助けを借りて文字列の最初の単語を抽出する方法若干の修正を加えて調整しました。@terdon いい答えです以下を追加してください.bash_profile
。
trap 'echo -ne "\033]0;${BASH_COMMAND%% *}\007"' DEBUG
function show_name {
if [[ -n "$BASH_COMMAND" ]]; then
echo -en "\033]0;`basename ${PWD}`\007"
fi
}
export PROMPT_COMMAND='show_name'
望むより!それは魅力のように動作します。