У меня есть несколько ответов для вас :) Вы правы, что не должно иметь значения, что вы используете gnome-терминал, но важно, какую командную оболочку вы используете. Это намного проще в zsh
, но в дальнейшем я собираюсь предположить, что вы используете bash
, и это довольно свежая версия (> 3.1).
Прежде всего:
Какая переменная среды
содержать текущую команду?
Существует переменная окружения, которая имеет более или менее то, что вы хотите - $BASH_COMMAND
. Есть только одна небольшая загвоздка, которая покажет вам только последнюю команду в трубе. Я не уверен на 100%, что он будет делать с комбинациями подоболочек:)
Так что я надеялся найти способ
захватить команду в bash и обновить
заголовок после каждой команды.
Я думал об этом, и теперь, когда я понял, что вы хотите сделать, я понял, что реальная проблема заключается в том, что вам нужно обновить заголовок перед каждой командой. Это означает, что переменные окружения $PROMPT_COMMAND
и $PS1
исключены как возможные решения, поскольку они выполняются только после , когда команда возвращает.
В bash
единственный способ, которым я могу придумать, чтобы достичь того, чего вы хотите, - это (а) использовать СИГНАЛ ОТЛАДКИ. Итак, вот решение - прикрепите это в конце вашего .bashrc
:
trap 'printf "\033]0;%s\007" "${BASH_COMMAND//[^[:print:]]/}"' DEBUG
Чтобы обойти проблему с трубами, я возился с этим:
function settitle () {
export PREV_COMMAND=${PREV_COMMAND}${@}
printf "\033]0;%s\007" "${BASH_COMMAND//[^[:print:]]/}"
export PREV_COMMAND=${PREV_COMMAND}' | '
}
export PROMPT_COMMAND=${PROMPT_COMMAND}';export PREV_COMMAND=""'
trap 'settitle "$BASH_COMMAND"' DEBUG
но я не обещаю, что он идеален!