Исправьте терминальный заголовок после SSH удаленный вход к другой машине

Прочитайте руководство смонтируйтесь (8)

   commit=nrsec
          Sync  all  data  and  metadata  every nrsec seconds. The default
          value is 5 seconds. Zero means default.

Очень короткий.

Новые диски разгружают головы. Затем нуждался бы в основе на размере фиксации и рискнул бы освобождать 10 минут работы для сохранения износа на диске.

18
15.06.2012, 08:25
10 ответов

Я не знаю о заголовках окон, но я пытался иметь свою систему, делают что-то при завершении ssh сессии — на самом деле, после завершения ssh сессии. Короче говоря: это не работает как этот. В основном у Вас есть три варианта:

  1. Запишите обертку вокруг ssh, т.е. исполняемый названный сценарий оболочки ssh это имеет приоритет /usr/bin/ssh в Вашем $PATH, который содержит строку exec /usr/bin/ssh $@ где-нибудь в его середине. Это включает, Вы, чтобы иметь Вашу оболочку делаете некоторый материал прежде и после того, как эффективный ssh двоичный файл выполняется при хранении th eoverhead к минимуму.

  2. Запишите патч против источников SSH по Вашему выбору, чтобы предоставить Вам рычаг очистки, который выполняется, команда оболочки передала через командную строку или некоторую установку конфигурации. Это - то, что мы хотим.

  3. Иметь PROMPT_COMMAND оцените вывод history. В основном более универсальный и более ужасный подход к 1.

6
27.01.2020, 19:46
  • 1
    в основном, который я просто записал простому сценарию, чтобы захватить текущий заголовок и сохранить его перед сессией SSH, затем восстановите заголовок впоследствии. –  nye17 15.06.2012, 22:04
  • 2
    @nye17 можно ли отправить сценарий решения, который Вы использовали? –  Reg Mem 29.07.2014, 21:28
  • 3
    , я отправил свой сценарий решения ниже. должно быть близкое соответствие, что сделал @nye17. unix.stackexchange.com/a/341277/112190 –  phyatt 30.01.2017, 21:03

Настройте свою локальную оболочку dotfile (например. $PROMPT_COMMAND в ~/.bashrc) установить терминальный заголовок соответственно, с помощью того же механизма.

Например:

export PROMPT_COMMAND="printf '\e]0;bash\7\n'"
4
27.01.2020, 19:46
  • 1
    1. prompt_command нечего делать с заголовком Вашего окна терминала, правильно? У меня есть настроенный prompt_command, но только для подсказки. 2. Мне все еще нужен механизм, чтобы помнить и активировать мою локальную установку после выхода из входа ssh. –  nye17 15.06.2012, 07:02
  • 2
    Быстрая команда просто испускает необходимую escape-последовательность для Вашего терминала для переименования его строки заголовка. :) –  Reinstate Monica 15.06.2012, 07:03
  • 3
    Быстрая команда просто испускает необходимую escape-последовательность для Вашего терминала для переименования его строки заголовка. :) –  Reinstate Monica 15.06.2012, 07:03
  • 4
    , но я также хочу свободу переименовать безотносительно терминала, который я хочу, вместо того, чтобы иметь каждую сессию то же имя. На практике я в основном редактирую терминальное руководство заголовка и надеюсь, что терминал для пребывания исправлявший заголовок даже после SSH входит в систему/выходит из системы. Это имеет смысл? –  nye17 15.06.2012, 08:23
  • 5
    Таким образом поместите желаемый заголовок в переменную и произведите это. –  Ignacio Vazquez-Abrams 15.06.2012, 09:08
  • 6
    Если Вы используете эту терминальную escape-последовательность для установки пустого заголовка (например, export PROMPT_COMMAND="printf '\e]0;\7\n'"), затем Ваш эмулятор терминала может установить заголовок окна, как он считает целесообразным. Когда Вы, ssh к удаленному хосту, который устанавливает терминальный заголовок, Ваш эмулятор терминала, покажет, что заголовок, и когда Вы выйдете из системы, он вернется к использованию его собственного заголовка. По крайней мере, это - то, как macOS Терминальное приложение работает. –  claymation 16.04.2017, 21:52

ADD эти строки к ~/.bashrc

# If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm*|rxvt*)
    PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"

    ;;
*)
    ;;
esac

работы хорошо с debian основывали Linux

3
27.01.2020, 19:46
  • 1
    IT не устанавливает заголовок, хотя... –  Bananguin 29.07.2014, 22:55
  • 2
    Это обычно работает лучше для использования PROMPT_COMMAND вместо использования PS1, так как Вы не должны включать \[ \] при заключении в скобки и это может устранить некоторое заключение в кавычки. –  Chris Page 25.10.2014, 03:41

Одним из решений является изменение переменной терминала на vt100 перед ssh'ing, например, run

export TERM=vt100

Это работает, потому что обычно инициализационные скрипты смотрят на переменную терминала и меняют ее название только на xterm. Вы теряете альтернативные экраны, цвета и, возможно, некоторые другие причудливые возможности, которые вы можете оценить, а можете и не оценить.

Если вы хотите сохранить локальный терминал как xterm, псевдоним ssh для изменения переменной терминала на лету, как

alias ssh='TERM=vt100 /usr/bin/ssh'
2
27.01.2020, 19:46

Я исправил эту проблему, добавив это в мой PS1 в .bashrc файл.

\[\e]2;\u@\H:\w\a\]

Поэтому вся строка выглядит так(я настроил свое PS!:

export PS1='\[\e]2;\u@\H:\w\a\]\n($LOGNAME@$HOSTNAME) \t\n[$PWD]: '

Надеюсь, это поможет другим.

0
27.01.2020, 19:46

Решение: добавьте несколько функций ~ / .bashrc, чтобы что-то делать после команд ssh и su

function title()
{
   # change the title of the current window or tab
   echo -ne "\033]0;$*\007"
}

function ssh()
{
   /usr/bin/ssh "$@"
   # revert the window title after the ssh command
   title $USER@$HOST
}

function su()
{
   /bin/su "$@"
   # revert the window title after the su command
   title $USER@$HOST
}

Примечание: перезапустите bash после редактирования to ~ / .bashrc

Пример:

# title is "user1@boxA"
ssh boxB  # auto changes title while on boxB to "user1@boxB"
exit
# title returns back to "user1@boxA" because of our title call in ssh()
su - user2 # auto changes title while switched user to user2: "user2@boxA"
exit
# title returns back to "user1@boxA" because of our title call in su()

Надеюсь, что это поможет.

7
27.01.2020, 19:46

Если удаленный сервер — Debian, поместите приведенный ниже код в конец~/.bashrc

PROMPT_COMMAND='echo -ne "\033]0;${USER}: ${PWD}\007"'
0
27.01.2020, 19:46

https://unix.stackexchange.com/a/341277/25975иhttps://unix.stackexchange.com/a/28520/25975были объединены для простого чистого решения в https://drone-ah.com/2020/06/25/how-to-terminal-title-after-disconnecting-from-ssh/. Он также восстанавливает прежнее название.

function ssh()
{
    # push current title and icon to stack
    echo -ne '\e[22t'
    # Execute ssh as expected
    /usr/bin/ssh "$@"
    # revert the window title after the ssh command
    echo -ne '\e[23t'
}
1
25.06.2020, 08:58

Это может быть не самый прямой подход, но я использую удаленное выполнение команды, чтобы выполнять команду удаленно по запросу в некоторых сценариях, но чтобы оставаться в моем прежнем сеансе терминала, где это применимо, как это

ssh root@server 'tail -f /var/log/someApp/appLog.log'

Таким образом, мой первоначальный заголовок не -ssh останется на месте, без изменений

0
29.10.2020, 09:03

Я использовал эту пользовательскую функцию в своем.bashrc

function s(){
  ssh -t $1 "echo -en '\033]0;'"$1"'\a';bash"
}
0
01.09.2021, 13:33

Теги

Похожие вопросы