My Bash Prompt в настоящее время устанавливает заголовок xterm, используя следующую последовательность:
PS1='\033]0;\u@\h>\w\007'
Есть ли простой способ отобразить текущую команду в заголовке. Например, если я отслеживаю файл с помощью tail -f foo.log
, я хочу, чтобы мой заголовок сказал tail -f foo.log
.
bash
prompt
xterm
window-title
кендырь
источник
источник
.bashrc
после каждой команды в моей оболочке, я получаю этот вывод0;%s@%s:%s" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}
. Я предполагаю, что могу подавить этот вывод, назначив команду trapPS1
? ОднакоPS1=trap 'echo -ne "\033]0;$BASH_COMMAND\007"' DEBUG
не работает. Это приводит к ошибкеbash: echo -ne "\033]0;$BASH_COMMAND\007": command not found
.trap
команду как отдельную команду , а не назначать ее для PS1.(Вдохновлен этим ответом SU )
Вы можете комбинировать парочку трюков с bash:
$BASH_COMMAND
содержит текущую командуИтак, перехватите DEBUG и обработчик установит заголовок на
$BASH_COMMAND
:Это будет держать заголовок измененным, пока что-то другое не изменит его, но пока вы
$PS1
остаетесь прежним, это не будет проблемой - вы запускаете команду, обработчик DEBUG меняет заголовок заголовка, а когда команда завершает работу, bash рисует новый подскажите и сбрасывает ваш заголовок снова.Полезный совет, найденный здесь (также откуда этот ответ SU), должен включать:
Это заставит bash распространить ловушку DEBUG на все запущенные вами субоболочки; иначе заголовок в них не изменится
источник
ssh
/dev/tty
вместо stderr?Я работал над своим решением из разных постов. Это создает заголовок, содержащий пользователя, имя хоста, pwd, tty и выполняемую в настоящее время команду (для bash).
Это выглядит так (команда не выполняется):
И вот так (выполняя команду):
Где-то в .bashrc я расширил PS1:
Добавляет текущую команду, используя историю 1 и ловушку :
Не стесняйтесь принять к вашим потребностям.
источник