私のBashプロンプトは現在、次の順序でxtermタイトルバーを設定しています。
PS1='\033]0;\u@\h>\w\007'
タイトルバーに現在のコマンドを表示する簡単な方法はありますか?たとえば、末尾のファイルを使用している場合は、tail -f foo.log
タイトルバーにを表示したいと思いますtail -f foo.log
。
答え1
デフォルトでは、以下が必要です。
trap 'printf "\033]0;%s\007" "${BASH_COMMAND//[^[:print:]]/}"' DEBUG
あなたの最後やそのようなもの.bashrc
。それを調べるのに少し時間がかかりました。私の答えを確認してくださいここより多くの情報を知りたい場合:)
答え2
(からインスピレーションを受けるこれが答えです)
いくつかのbashトリックを組み合わせることができます:
- DEBUG 信号が捕捉されると、各コマンドを実行する前にハンドラが呼び出されます。
- この変数は
$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トラップを開始するすべてのサブシェルに伝播します。それ以外の場合、タイトルバーは変更されません。
答え3
私はさまざまな投稿から自分のソリューションを思い出しました。これにより、ユーザー、ホスト名、パスワード、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\]"
現在のコマンドを追加するには、次のようにします。歴史1そして罠:
# 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
必要に応じて自由に調整してください。