Я хотів би встановити заголовок терміналу user@host
таким чином, щоб я міг легко визначити, до якої машини я підключений з назви вікна. Чи можна це зробити з SSH або з терміналу GNOME?
Я хотів би встановити заголовок терміналу user@host
таким чином, щоб я міг легко визначити, до якої машини я підключений з назви вікна. Чи можна це зробити з SSH або з терміналу GNOME?
Відповіді:
Так. Ось приклад для bash з використанням PS1, який повинен бути дистрофічним:
Зокрема, \[\e]0; __SOME_STUFF_HERE__ \a\]
інтерес представляє послідовність втечі . Я відредагував це, щоб встановити його в окрему змінну для більшої ясності.
# uncomment for a colored prompt, if the terminal has the capability; turned
# off by default to not distract the user: the focus in a terminal window
# should be on the output of commands, not on the prompt
force_color_prompt=yes
if [ -n "$force_color_prompt" ]; then
if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
# We have color support; assume it's compliant with Ecma-48
# (ISO/IEC-6429). (Lack of such support is extremely rare, and such
# a case would tend to support setf rather than setaf.)
color_prompt=yes
else
color_prompt=
fi
fi
TITLEBAR='\[\e]0;\u@\h\a\]'
# Same thing.. but with octal ASCII escape chars
#TITLEBAR='\[\033]2;\u@\h\007\]'
if [ "$color_prompt" = yes ]; then
PS1="${TITLEBAR}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\W\[\033[00m\]\$ "
else
PS1="${TITLEBAR}\u@\h:\W\$ "
fi
unset color_prompt force_color_prompt
Також зауважте, що може бути багато способів встановлення заголовка xterm, залежно від того, яку термінальну програму ви використовуєте та яку оболонку. Наприклад, якщо ви використовуєте консоль KDE, ви можете змінити налаштування заголовка, перейшовши до Settings
-> Configure Profiles
-> Edit Profile
-> Tabs
та встановивши параметри Tab title format
та Remote tab title format
налаштування.
Крім того, ви можете перевірити:
\h
введіть це запит лише у тому випадку, якщо $SSH_CLIENT
він не порожній.
\[\e]2;\u@\h\a
. (Також відредагував мою відповідь із цією інформацією)
Ось версія сценарію bash SSH, яку я використовую, яка встановлює заголовок та командний рядок віддаленого сервера, не вносячи жодних змін на віддалений сервер.
my_ssh.sh:
#!/bin/bash
SETTP='MY_PROMPT="$HOSTNAME:$PWD\$ "'
SETTP="$SETTP;"'MY_TITLE="\[\e]0;$HOSTNAME:$PWD\a\]"'
SETTP="$SETTP;"'PS1="$MY_TITLE$MY_PROMPT"'
ssh -t $1@$2 "export PROMPT_COMMAND='eval '\\''$SETTP'\\'; bash --login"
Ви можете викликати це, зателефонувавши ./my_ssh.sh ім'я хоста
Наступні роботи для мене (мабуть, лише на gnome-терміналі):
comp@home$ cat /usr/bin/ssh
#!/bin/bash
echo -ne "\033]0;${1}\007"
ssh_bkup "$@"
Де команда ssh_bkup - це лише базовий 'ssh' зі зміненим іменем, яке викликається відразу після того, як команда echo змінює назву поточного терміналу.
~/bin
має пріоритет на моєму шляху, тому я розмістив ваш сценарій у своєму ~/bin/ssh
. Останній рядок явно закликає до /usr/bin/ssh
. Таким чином, інші користувачі все ще використовують стандарт ssh
під час входу на цю машину, і (оскільки наші домашні каталоги знаходяться на сервері, облікові записи LDAP), я отримую функціональність на тій машині, на якій я ввійшов.
це псевдонім версія
SETTP='MY_PROMPT="$HOSTNAME:$PWD\$ "'
SETTP="$SETTP;"'MY_TITLE="\[\e]0;$HOSTNAME:$PWD\a\]"'
SETTP="$SETTP;"'PS1="$MY_TITLE$MY_PROMPT"'
SETPC="export PROMPT_COMMAND='eval '\\''$SETTP'\\'; bash --login"
alias myssh='function _myssh(){ ssh -t $1@$2 $SETPC; };_myssh'