リモートUbuntuシステムに接続するたびに、gnome-terminalは"$USER"@"$(hostname -s)": "$PWD"
。コマンドを実行します。
shをデフォルトのシェルとして使用してFreeBSDシステムにユーザーとして接続すると、gnome-terminalのヘッダーは更新されません。
.shrcファイルに以下を入れました。
PS1='['"$USER"'@\h \w'
case "$USER" in
root)
PS1="${PS1}]# "
;;
*)
PS1="${PS1}]$ "
;;
esac
esc="$(printf '\033')"
bel="$(printf '\007')"
case "$TERM" in
xterm)
#cannot get this part to work
PS1='['"${esc}"'0;'"${USER}"'@\h \w'"$bel"']'"$PS1"
;;
*)
;;
esac
だからここに問題があります。便利なリソースがたくさん見つかりましたが、POSIX準拠のshを使用してヘッダーを設定する方法を示すリソースはありません。これは私が最も役に立つと思いました(実際にこれを参照として使用してbashとkshにヘッダを設定できました)。
ほとんど来たようですが、タイトルバーを設定するためにshに何を与えるべきかわからないようです。
答え1
POSIX shで良いプロンプトを得る方法を見つけるために、PS1のsh実装で解決しなければならなかった2つの制限に遭遇しました。
\w
in var はPS1
機能しますが、$HOME
次には展開されません。~
PS1
以下を使用して端末のプロンプトをPS1
更新できます. bashまたはkshを使用している場合、および文字はESC
ヘッダーBEL
を期待どおりに設定しません。
これが最終結果であり、本当にうまくいきます。これを.shrcファイルに追加する必要があります(まず、PS1がまだ定義されていないことを確認してください)。
update_prompt() {
case "$PWD" in
"$HOME"*)
pretty_pwd="~${PWD#*"${HOME}"}"
;;
"/usr$HOME"*)
pretty_pwd="~${PWD#*"/usr${HOME}"}"
;;
*)
pretty_pwd="$PWD"
;;
esac
case "$TERM" in
xterm*|rxvt*)
PS1="($USER@\\h $pretty_pwd)\\$ "
;;
*)
;;
esac
printf "\\033]0;(%s@$(hostname -s): %s)\\007" "$USER" "$pretty_pwd"
}
update_prompt
cd() {
command cd "$@" && update_prompt
}
プロンプトは括弧内に表示されます。これは私がUbuntuではなくFreeBSDを使用していることを自分自身に個人的に思い出させます。より伝統的なプロンプトが必要な場合は、次を使用してください。
update_prompt() {
case "$PWD" in
"$HOME"*)
pretty_pwd="~${PWD#*"${HOME}"}"
;;
"/usr$HOME"*)
pretty_pwd="~${PWD#*"/usr${HOME}"}"
;;
*)
pretty_pwd="$PWD"
;;
esac
case "$TERM" in
xterm*|rxvt*)
PS1="$USER@\\h $pretty_pwd\\$ "
;;
*)
;;
esac
printf "\\033]0;%s@$(hostname -s): %s\\007" "$USER" "$pretty_pwd"
}
update_prompt
cd() {
command cd "$@" && update_prompt
}
"/usr$HOME"*)
Linuxを使用している場合は、この条件を削除できます。/home
通常、FreeBSDを使用しない限り役に立ちません/usr/home
。