回答:
基本的に、次のものが必要です。
trap 'printf "\033]0;%s\007" "${BASH_COMMAND//[^[:print:]]/}"' DEBUG
あなた.bashrc
または類似の終わりに。これを解決するためにしばらく時間がかかりました-詳細については、私の答えを参照してください:)
trap
コマンドをPS1に割り当てるのではなく、別のコマンドとして実行することをお勧めします。
(このSUの回答に触発された)
いくつかのbashトリックを組み合わせることができます。
$BASH_COMMAND
は現在実行中のコマンドを保持しますしたがって、DEBUGをトラップし、ハンドラーにタイトルを設定させ$BASH_COMMAND
ます:
trap 'printf "\033]0;%s\007" "${BASH_COMMAND//[^[:print:]]/}" >&2' DEBUG
これにより、他の何かが変更されるまでタイトルは変更された$PS1
ままになりますが、同じままである限り問題はありません-コマンドを開始すると、DEBUGハンドラーはタイトルバーを変更し、コマンドが終了するとbashが新規を描画しますプロンプトを表示して、タイトルバーを再度リセットします。
便利なヒントが見つかりました。ここに(また、そのSUの答えはどこから来たのか)を含むことがあります。
set -o functrace
これにより、bashは起動したサブシェルにDEBUGトラップを伝播します。そうでない場合、タイトルバーは変更されません
ssh
/dev/tty
stderrの代わりにリダイレクトする方が良いと思いませんか?
私はさまざまな投稿から自分のソリューションを回避しました。これにより、ユーザー、ホスト名、pwd、tty、および現在実行されているコマンド(bash用)を含むタイトルが作成されます。
これは次のようになります(コマンドは実行されません):
.:[user@hostname:/home/user][pts/10]:.
そして、このように(コマンドを実行する):
.:[user@hostname:/home/user][pts/10] {tail -F /var/log/syslog}:.
.bashrcのどこかで、PS1を拡張しました。
# set the terminals title. This is the "post-command" part,
# need to use a trap for pre-command (to add the command line to the title)
PS1+="\[\033]2;.:[\u@\h:\$PWD] [$(tty | cut -b 6-)]:.\007\]"
history 1およびtrapを使用して、現在のコマンドを追加します。
# set a fancy title (this is pre-command, in PS1 is after-command (to reset command)
trap 'echo -ne "\033]2;.:[${USER}@${HOSTNAME}:${PWD}] [$(tty | cut -b 6-)] {$(history 1 | sed "s/^[ ]*[0-9]*[ ]*//g")}:.\007"' DEBUG
必要に応じて自由に採用してください。
.bashrc
シェルの各コマンドの後にこれを追加すると、この出力が表示されます0;%s@%s:%s" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}
。trapコマンドをPS1
?に割り当てることで、この出力を抑制できると思います。ただし、PS1=trap 'echo -ne "\033]0;$BASH_COMMAND\007"' DEBUG
機能しません。エラーにつながりますbash: echo -ne "\033]0;$BASH_COMMAND\007": command not found
。