ターミナルのトップバーに実行中のコマンドを表示させる方法は?


13

完了までに長い時間がかかるコマンドを並行して実行することがよくあります。また、基本的に同じ種類の情報を画面に出力するため、どこで実行されているのか追跡できなくなります。

どのコマンドがどの端末で実行されているかを知る方法を知っていますか?


1
これがまだ機能するかどうかはわかりませんが、これは@dessertの優れた答え以外にも役立つかもしれません。→ askubuntu.com
questions

回答:


12

Bashから取得-2番目のコマンド・U&L実行して端末タイトルを更新し、わずかに変更しました:

trap 'echo -ne "\033]2;$(history 1 | sed "s/^[0-9 ]* \+//")\007"' DEBUG

これは、DEBUG信号をトリガーとして使用して、XTerm Control Sequenceを介して、履歴の最後のエントリ、つまり最後に実行したコマンドでタイトルを更新します。行を追加~/.bashrcして、新しいターミナルウィンドウごとに機能を有効にします。

タイトルと一緒に他のコマンド出力を印刷するにpwdは、「:」が付いた現在のディレクトリと現在実行中のコマンドを言うとprintf、次のように使用することをお勧めします。

trap 'echo -ne "\033]2;$(printf "%s: %s" "$(pwd)" "$(history 1 | sed "s/^[0-9 ]* \+//")")\007"' DEBUG

一部のターミナルエミュレータでは、動的なタイトルを指定したり、オプションとしてコマンド名を指定したりすることもできます。そのため、いじる必要さえありませんyakuake


2

ターミナルウィンドウのタイトルは、変数の値を変更することで変更できます($PS1プライマリプロンプト文字列)。[1] [2]。このソリューションと、デザートの答えからのコマンドを使用するという考えを組み合わせることができます history


アプローチ1:の値を$PS1自動的に更新します。(更新)

ファイルの最後に次の行を追加します~/.bashrc

# Change the terminal window title, based on the last executed command
rtitle() {
        # If the variable $PS1_bak is unset,
        # then store the original value of $PS1 in $PS1_bak and chang $PS1
        # else restore the value of $PS1 and unset @PS1_bak
        if [ -z "${PS1_bak}" ]; then
                PS1_bak=$PS1
                PS1+='\e]2;$(history 1 | sed "s/^[0-9 ]* \+//")\a'
        else
                PS1=$PS1_bak
                unset PS1_bak
        fi
};
export -f rtitle        # Export the function to be accessible in sub shells
#rtitle                 # Uncomment this line to change the default behaviour

その後、source ~/.bashrcまたは単に新しいターミナルを開いて、この方法で関数を使用します。

  • 実行rtitle最後に実行したコマンドに基づいて、自動的にターミナルウィンドウのタイトルを変更することを開始します。
  • 実行する rtitleもう一度して、デフォルトの動作に戻ります。

アプローチ2:の値を$PS1手動で更新します。(最初の答え)

ファイルの最後に次の行を追加します ~/.bashrc

set-title() {                                                                                 # Set a title of the current terminal window
        [[ -z ${@} ]] && TITLE="$(history 2 | head -1 | sed "s/^[0-9 ]* \+//")" || TITLE="$@" # If the title is not provided use the previous command
        [[ -z ${PS_ORIGINAL} ]] && PS_ORIGINAL="${PS1}" || PS_ORIGINAL="${PS_ORIGINAL}"       # Use the original value of PS1 for each future change
        PS1="${PS_ORIGINAL}"'\e]2;'"$TITLE"'\a'                                               # Change the prompt (the value of PS1)
}; export -f set-title

それから source ~/.bashrcまたは単に新しいターミナルを開いて、この方法で関数を使用します。

  • set-title <something>端末ウィンドウのタイトルをに変更します<something>
  • set-title 引数なしでは、ターミナルウィンドウのタイトルが前のコマンドに変更されます。

参照と例:

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.