Ubuntu 16 でターミナルのタイトルを台無しにせずに gnome ターミナルの bash プロンプトを変更するにはどうすればよいですか?

Ubuntu 16 でターミナルのタイトルを台無しにせずに gnome ターミナルの bash プロンプトを変更するにはどうすればよいですか?

長いディレクトリパスがターミナルのスペースを圧迫するのは嫌なので、Pythonスクリプトを使って切り詰めています。.bashrcファイルを編集してPS1を

export PROMPT_COMMAND='PS1="$(python /home/vinay/bash_promt.py)"'.

そして、そうするとターミナルのタイトルが機能しなくなります。単に と表示されるだけなのでTerminalイライラします。bash で次のコマンドを実行して、タイトルを手動で変更できます。

PROMPT_COMMAND='echo -ne "\033]0;CUSTOM TITLE\007"'

bash で設定されているカスタムプロンプトにターミナルのタイトルを設定する方法はありますか。

答え1

gnome-terminal の場合、ターミナルのタイトルはPROMPT_COMMANDで定義されている を介して設定されます/etc/profile.d/vte-2.91.sh

PROMPT_COMMANDこのスクリプトで定義されている は、次の 2 つのことを行います。

  • OSC 0エスケープシーケンス(\033]0;NEW_TITLE\007)を使用して端末タイトルを変更します。

  • OSC 7 エスケープ シーケンス ( \033]7;NEW_CURRENT_DIRECTORY\007、これは関数に分離されます__vte_osc7) を使用して、端末の現在のディレクトリの概念を変更します。

から 2 番目を削除するとPROMPT_COMMAND、新しく開いたターミナル ウィンドウまたはタブは、前のターミナルで立っていたディレクトリで開かなくなります。おそらく、これは望ましくないでしょう。

したがって、シェルの起動スクリプトでは、ソースを取得した後、と同様の方法でタイトルを設定し、現在の作業ディレクトリをデフォルトとまったく同じように設定する、vte-2.91.sh優先される を構築する必要があります。PROMPT_COMMANDvte-2.91.sh

PS1の解決された値 (つまり、ユーザー名などを置き換えた後の値) を の内部または他の場所で参照する方法は知りません(色の変更などのエスケープ シーケンスをフィルター処理することは言うまでもありません)。プロンプトとウィンドウ タイトルに同じ文字列を表示したい場合は、とPROMPT_COMMANDの文字列の構造を複製する必要があると思います。PS1PROMPT_COMMAND

答え2

これはあなたにとって効果的です

を開きます ~/.bashrc。次の行を見つけます:

PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"

#この行の前に文字を入れてコメントアウトします。

# PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"

次に、次の行を追加します (コメントアウトされた行の直後に追加することをお勧めします)。

PROMPT_COMMAND='echo -ne "\033]0;Custom Name\007"'

交換するCustom Nameターミナルのタイトルを変更したいものに置き換えます。

お役に立てれば。

答え3

使用するエスケープシーケンスはESC]2;新しいタイトルBELどこESCそしてベルはエスケープ文字とベル文字です。 のように\[\e]2;NEWTITLE\a\]。#Bash エスケープ シーケンスを使用してプロンプトのタイトルを変更すると、次のようになります。

export PS1='\[\e]2;new title\a\]prompt > ' ドキュメント参照

したがって、カスタムターミナルタイトルも持つ、複数色の切り捨てられた bash プロンプトの例は次のようになります。

export PS1='\[\e]2;$PWD\a\]\e[93m$USER\e[97m@\e[90m$HOSTNAME \e[93m$ \e[0m'

この例では、ターミナルのタイトルは常に現在の作業ディレクトリ ( $PWD) を反映し、ターミナルのプロンプトは、現在のディレクトリに関係なく常に次のようになりますuser@hostname $

$PWDを に置き換えるCUSTOM TITLEと、ターミナルのタイトルが常に を反映するようになりますCUSTOM TITLE

アップデート
印刷されない文字を と で囲まない場合は注意してください\[\]と なしでも動作しますし、私は何年も と なしでやってきました。 しかし、今日いくつかの設定でわかったことですが、いくつかの問題を引き起こす可能性があるターミナルで。以下は変数を使用し、カラーコードをラップしたよりクリーンなバージョンです。

T_YELLOW='\[\e[93m\]'
T_WHITE='\[\e[97m\]'
T_GRAY='\[\e[90m\]'
T_DEFAULT='\[\e[0m\]'
T_TITLE='\[\e]2;$PWD\a\]'
export PS1="${T_TITLE}${T_YELLOW}$USER${T_WHITE}@${T_GRAY}$HOSTNAME${T_YELLOW} $ ${T_DEFAULT}"

関連情報