回答:
シェルに依存します。
私は個人的に、各プロンプトの前に実行される便利なprecmd()関数を持つzshを使用しています。
precmd () { print -Pn "\e]2;%n@%M | %~\a" } # title bar prompt
他の質問にはbashメソッドがリストされていますが、cdのエイリアスです。Bashは、プロンプトだけをチェーン化する固有のメソッドを提供します。
バッシュ
bashは、プロンプトの前に実行するコマンドを含む変数PROMPT_COMMANDを提供します。次の例(〜/ .bashrcに挿入)は、タイトルを「username @ hostname:directory」に設定します。
PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}: ${PWD}\007"'
ここで、\ 033はESCの文字コード、\ 007はBELの文字コードです。ここでは、引用が重要であることに注意してください。変数は「...」で展開され、「...」では展開されません。したがって、PROMPT_COMMANDは展開されていない値に設定されますが、PROMPT_COMMANDを使用すると、「...」内の変数が展開されます。
ただし、PWDは完全なディレクトリパスを生成します。「〜」の短縮形を使用する場合は、プロンプトにエスケープ文字列を埋め込む必要があります。これにより、シェルが提供する次のプロンプト展開を利用できます。
\u expands to $USERNAME
\h expands to hostname up to first '.'
\w expands to directory, replacing $HOME with '~'
\[...\] embeds a sequence of non-printing characters
したがって、次のプロンプトは「bash $」のプロンプトと「username @ hostname:directory」のxtermタイトルを生成します...
case $TERM in
xterm*)
PS1="\[\033]0;\u@\h: \w\007\]bash\$ "
;;
*)
PS1="bash\$ "
;;
esac
[...]の使用に注意してください。これは、プロンプトの幅を計算するときに、非印刷制御文字を無視するようにbashに指示します。そうしないと、カーソルの配置中に行編集コマンドが混乱します。
~/.profile
に、リモートマシン上の(または同等の)ファイルに入れるだけです。
Mac OS X Lion 10.7の時点で、ターミナルには作業ディレクトリを設定するための明示的なエスケープシーケンスがあり、ターミナルは標準ウィンドウの「プロキシ」アイコンを使用して表示します。これにより、コマンドキーを押しながらクリックしてパスを表示したり、Finderで表示したり、他のフォルダーと同じようにドラッグしたりできます。さらに、ターミナルはこれを使用して、同じディレクトリに別のターミナルを作成し、ターミナルを終了/再起動するとき(再開が有効な場合)に作業ディレクトリを復元できます。また、ウィンドウグループのディレクトリを復元することもできます。
これは、ウィンドウおよびタブタイトルと同じオペレーティングシステムコマンド(OSC)エスケープシーケンスですが、最初のパラメーターは7に設定されています。値は、「file:」URLである必要があります。すべての有効なパス名。また、ターミナルがローカルディレクトリかどうかを判断できるように、ホスト名も含める必要があります。ターミナルは、別のホストからのものである場合、現在の作業ディレクトリとして使用することを避けます。
関連する注意事項として、ターミナルは同様に、OSCエスケープシーケンスを使用してパラメーター6で「表示されたファイル」の設定をサポートします。設定すると、プロキシアイコンは作業ディレクトリではなくこれを表示します。たとえば、emacsがあり、プロキシアイコンに現在表示されているファイル/バッファを反映するように構成されています。これにより、これらのttyベースのプログラムを周囲のOSとより統合できます。
作業ディレクトリの動作は、bash(Mac OS Xのデフォルトのシェル)でデフォルトで有効になっています。関連するコードについては、/ etc / bashrcを参照してください。
Lion Terminalは、OSCエスケープシーケンスを使用して、ウィンドウタイトルとは別にタブタイトルの設定をサポートするようになったことに言及する価値があるでしょう。
update_terminal_cwd
関数は、プロキシアイコンを現在の作業ディレクトリに設定します。デフォルトで$PROMPT_COMMAND
はupdate_terminal_cwd
です。
別に推薦から、あなたは、Appleターミナル、特定のオペレーティングシステムのコマンドエスケープシーケンスを使用します。あるとされるURLを、Mac OS X 10.11(およびおそらく10.7以降)には、(コメントなしで)便利なものを定義するファイル(10.11では編集不可)が追加されていることは価値があります。ESC ] Ps ; Pt BEL
Ps
7
Pt
file:
/etc/bashrc_Apple_Terminal
update_terminal_cwd()
update_terminal_cwd ()
{
local url_path='';
{
local i ch hexch LC_CTYPE=C LC_ALL=;
for ((i = 0; i < ${#PWD}; ++i))
do
ch="${PWD:i:1}";
if [[ "$ch" =~ [/._~A-Za-z0-9-] ]]; then
url_path+="$ch";
else
printf -v hexch "%02X" "'$ch";
url_path+="%${hexch: -2:2}";
fi;
done
};
printf '\e]7;%s\a' "file://$HOSTNAME$url_path"
}
あなたがそうすることを考えていて、bashでファイルURLを正しくエンコードすることに頭を悩ましているのであれば、リモートボックスでもこれを使用できます。
そして、あなたが変更した場合PROMPT_COMMAND
、独自に.bash_profile
または.bashrc
あなたはこれを呼び出すことを忘れかもしれません。同じファイル内で、次のように少しうまく連鎖させた例を示しています。
PROMPT_COMMAND="update_terminal_cwd${PROMPT_COMMAND:+; $PROMPT_COMMAND}"
私.bash_profile
は個人的にgitプロンプトを追加したかったのでこれを行いました:
local git_path=/Applications/Xcode.app/Contents/Developer/usr/share/git-core
for f in $git_path/git-completion.bash $git_path/git-prompt.sh
do
if [[ -f "$f" ]]; then
. "$f"
fi
done
get_sha() {
git rev-parse --short HEAD 2>/dev/null
}
if [ "function" = $(type -t __git_ps1) ]; then
export GIT_PS1_SHOWDIRTYSTATE=1
GIT_PS1_SHOWSTASHSTATE=1
GIT_PS1_SHOWUNTRACKEDFILES=1
GIT_PS1_SHOWCOLORHINTS=1
GIT_PS1_DESCRIBE_STYLE="branch"
GIT_PS1_SHOWUPSTREAM="auto git"
export PROMPT_COMMAND="$PROMPT_COMMAND${PROMPT_COMMAND:+; }"'__git_ps1 "\[\e[0;32m\]\u\[\e[1;32m\]@\h\[\e[0m\]:\[\e[0;34m\]\w\[\e[0m\]" "\$ " "\n{%s $(get_sha)}"'
fi
ディレクトリにUnicode文字が含まれている場合(少なくともSnow Leopardでは)、PS1とPROMPT_COMMANDを含むBashソリューションは両方とも失敗します。私が思いついた最良の解決策は、同等のことをすることでした
PS1="\[\033]0;\`pwd | tr -dC '[\000-\177]'\`\007\]\$ "
残念ながら、これは直接機能しないため、代わりにtr
呼び出しを行うシェル関数を定義しました。
termtitlefilter () { tr -dC '[\000-\177]'; }
PS1="\[\033]0;\`pwd | termtitlefilter\`\007\]\$ "
これは、Unicode NFDで使用されるラテン語のアクセントに適しています(アクセントは消えますが、基礎となるラテン文字は残ります)。
残念ながら、中国語のようなものでは完全に失敗します。
これを〜/ .profileまたは同等のファイルに入力します。
function settitle() { echo -n "]0;$@"; }
function cd() { command cd "$@"; settitle `pwd -P`; }
export PS1='\W \$ '
settitle `pwd`
最初の行は、コピー/貼り付けることができない二つの特別な文字が含まれていますが、ここからテキストをダウンロードすることができます:http://blog.nottoobadsoftware.com/files/setterminaltitle.shを。
echo
使用することをprintf
あなたはエスケープシーケンスでこれらの文字(ESCとBEL /コントロール-G)を発現することができますこれは、:printf '\e]0;$@\a"