Как заставить верхнюю панель моего терминала сказать, какая команда запущена?

13

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

Знаете ли вы какой-либо способ узнать, какая команда выполняется в каком терминале?

Лука Минчулло
источник
1
Не уверен, что это все еще работает, но это может помочь, кроме превосходного ответа @dessert. → askubuntu.com/questions/774532/…
Видеонавт

Ответы:

12

Взято из Bash - Обновите заголовок терминала, выполнив вторую команду · U & L и немного изменив:

trap 'echo -ne "\033]2;$(history 1 | sed "s/^[0-9 ]* \+//")\007"' DEBUG

Это (ab) использует DEBUGсигнал в качестве триггера для обновления заголовка последней записью из вашей истории, то есть последней выполненной вами командой, через управляющую последовательность XTerm . Добавьте строку в свой, ~/.bashrcчтобы включить функцию в каждом новом окне терминала.

Чтобы напечатать другой вывод команды рядом с заголовком, скажем текущий каталог с pwdпоследующим «:» и текущую команду, я рекомендую использовать printfследующее:

trap 'echo -ne "\033]2;$(printf "%s: %s" "$(pwd)" "$(history 1 | sed "s/^[0-9 ]* \+//")")\007"' DEBUG

Некоторые эмуляторы терминала позволяют вам указывать динамический заголовок и даже дают вам имя команды в качестве опции, так что вам даже не нужно возиться - я искал и нашел его в yakuakeнастройках профиля.

Десерт
источник
2

Заголовок окна терминала может быть изменен путем изменения значения переменной $PS1- строки первичного приглашения. [1] [2] . Мы могли бы объединить это решение с идеей использования команды из history ответа Десерта .


Подход 1: обновить значение $PS1 автоматически. (Обновить)

Добавьте следующие строки в конец файла ~/.bashrc:

# Change the terminal window title, based on the last executed command
rtitle() {
        # If the variable $PS1_bak is unset,
        # then store the original value of $PS1 in $PS1_bak and chang $PS1
        # else restore the value of $PS1 and unset @PS1_bak
        if [ -z "${PS1_bak}" ]; then
                PS1_bak=$PS1
                PS1+='\e]2;$(history 1 | sed "s/^[0-9 ]* \+//")\a'
        else
                PS1=$PS1_bak
                unset PS1_bak
        fi
};
export -f rtitle        # Export the function to be accessible in sub shells
#rtitle                 # Uncomment this line to change the default behaviour

потом source ~/.bashrc или просто откройте новый терминал и используйте функцию следующим образом:

  • Выполните, rtitleчтобы начать автоматическое изменение заголовка окна терминала на основе последней выполненной команды.
  • Выполните rtitleеще раз, чтобы вернуться к поведению по умолчанию.

Подход 2: обновить значение $PS1вручную.(Первоначальный ответ)

Добавьте следующие строки в конец файла ~/.bashrc:

set-title() {                                                                                 # Set a title of the current terminal window
        [[ -z ${@} ]] && TITLE="$(history 2 | head -1 | sed "s/^[0-9 ]* \+//")" || TITLE="$@" # If the title is not provided use the previous command
        [[ -z ${PS_ORIGINAL} ]] && PS_ORIGINAL="${PS1}" || PS_ORIGINAL="${PS_ORIGINAL}"       # Use the original value of PS1 for each future change
        PS1="${PS_ORIGINAL}"'\e]2;'"$TITLE"'\a'                                               # Change the prompt (the value of PS1)
}; export -f set-title

Затемsource ~/.bashrc или просто откройте новый терминал и используйте функцию следующим образом:

  • set-title <something>изменит заголовок окна терминала на <something>.
  • set-title без аргумента изменит заголовок окна терминала на предыдущую команду.

Ссылки и примеры:

pa4080
источник