Команда отображения в xterm строке заголовка

ArchLinux является очень хорошим, прокручивающимся выпуском, минималистическим распределением. Вы получаете минимальную установку CD и устанавливаете то, что Вы хотите к тому же; возможно сделать это чрезвычайно легким и быстрым.

Я работаю на нем в значительной степени все, что я имею от старых систем как Ваши к новейшему, и это действительно быстро на всех; я искренне рекомендовал бы это.

23
07.05.2011, 15:24
3 ответа

В основном Вам нужно:

trap 'printf "\033]0;%s\007" "${BASH_COMMAND//[^[:print:]]/}"' DEBUG

в конце Вашего .bashrc или подобный. Взял меня некоторое время, чтобы решить, что это - видит мой ответ здесь для получения дополнительной информации :)

16
27.01.2020, 19:42
  • 1
    Спасибо за это решение simon! Однако при добавлении этого к моему .bashrc после каждой команды в моей оболочке я получаю этот вывод 0;%s@%s:%s" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}. Я предполагаю, что могу подавить этот вывод путем присвоения команды прерывания PS1? Однако PS1=trap 'echo -ne "\033]0;$BASH_COMMAND\007"' DEBUG не работает. Это приводит к ошибке bash: echo -ne "\033]0;$BASH_COMMAND\007": command not found. –  orschiro 07.12.2013, 10:17
  • 2
    BTW, я просто выставил stackoverflow.com/questions/48407130 / …, спрошенный, по-видимому, в результате этого применяемого совета. Прерывание должно писать в stderr или в TTY непосредственно, не к stdout. –  Charles Duffy 23.01.2018, 19:28
  • 3
    @orschiro, совет работать trap управляйте как отдельная команда, для не присвоения его PS1. –  Charles Duffy 23.01.2018, 19:29

(Вдохновленный этим ответом SU)

Можно объединить пару приемов удара:

  • При захвате сигнала ОТЛАДКИ обработчик называют, прежде чем каждая команда выполняется
  • Переменная $BASH_COMMAND содержит в настоящее время выполняющуюся команду

Так, ОТЛАДКА прерывания и имеет обработчик, устанавливает заголовок на $BASH_COMMAND:

trap 'printf "\033]0;%s\007" "${BASH_COMMAND//[^[:print:]]/}" >&2' DEBUG

Это сохранит заголовок измененным, пока что-то еще не изменит его, но настолько же долго как Ваш $PS1 остается таким же это не будет проблема - Вы запускаете команду, обработчик ОТЛАДОК изменяет строку заголовка, и когда удар концов команды привлекает новую подсказку и сбрасывает Вашу строку заголовка снова.

Полезная подсказка, найденная здесь (также, где, из которого прибыл ответ SU), должна включать:

set -o functrace

Это заставит удар распространить прерывание ОТЛАДКИ к любым подоболочкам, которые Вы запускаете; иначе строка заголовка не будет изменена в них

12
27.01.2020, 19:42
  • 1
    ха! тот же ответ в точно то же время! +1 для обработки подоболочек, но у Вас есть какое-либо решение проблемы каналов? (см. мою ссылку на ТАК вопрос), –  simon 10.03.2011, 17:47
  • 2
    Не работает через ssh –  abyss.7 15.02.2016, 10:16
  • 3
    Также "уничтожает" завершение на "вкладке" –  abyss.7 15.02.2016, 10:32
  • 4
    BTW, я просто выставил stackoverflow.com/questions/48407130 / …, спрошенный, по-видимому, в результате этого применяемого совета. Прерывание должно писать в stderr или в TTY непосредственно, не к stdout. –  Charles Duffy 23.01.2018, 19:29

Я работал над своим собственным решением из разных сообщений. Это создает заголовок, содержащий пользователя, имя хоста, pwd, tty и текущую выполняемую команду (для bash).

Это выглядит так (команда не выполняется):

.:[user@hostname:/home/user][pts/10]:.

И вот так (выполнение команды):

.:[user@hostname:/home/user][pts/10] {tail -F /var/log/syslog}:.

Где-то в .bashrc я расширил PS1:

# set the terminals title. This is the "post-command" part,
# need to use a trap for pre-command (to add the command line to the title)
PS1+="\[\033]2;.:[\u@\h:\$PWD] [$(tty | cut -b 6-)]:.\007\]"

Добавляет текущую команду, используя history 1 и trap :

# set a fancy title (this is pre-command, in PS1 is after-command (to reset command)
trap 'echo -ne "\033]2;.:[${USER}@${HOSTNAME}:${PWD}] [$(tty | cut -b 6-)] {$(history 1 | sed "s/^[ ]*[0-9]*[ ]*//g")}:.\007"' DEBUG

Не стесняйтесь приспосабливать к своим потребностям.

3
20.08.2021, 13:37

Теги

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