Я часто выполняю команды параллельно, выполнение которых занимает много времени, и иногда я теряю отслеживание того, что выполняется, поскольку они выводят в основном ту же информацию на экране.
Знаете ли вы какой-нибудь способ узнать, какая команда выполняется в каком терминале?
Взято из Bash - Обновите заголовок терминала, введя вторую команду · U & amp; L и немного изменив:
trap 'echo -ne "\033]2;$(history 1 | sed "s/^[0-9 ]* \+//")\007"' DEBUG
Этот (ab) использует сигнал DEBUG
в качестве триггер для обновления заголовка последней записью из вашей истории, то есть последней выполненной вами командой, с помощью XTerm Control Sequence . Добавьте строку в ~/.bashrc
, чтобы включить функцию в каждом новом окне терминала.
Чтобы напечатать другой вывод команды рядом с заголовком, скажем текущий каталог с pwd
, затем «:» и текущая команда, я рекомендую использовать printf
следующим образом:
trap 'echo -ne "\033]2;$(printf "%s: %s" "$(pwd)" "$(history 1 | sed "s/^[0-9 ]* \+//")")\007"' DEBUG
Некоторые эмуляторы терминала позволяют вам указывать динамический заголовок и даже дают вам имя команды в качестве опции, так что вам даже не нужно возиться - я искал и нашел его в настройках профиля yakuake
.
Заголовок окна терминала мог быть изменен путем изменения значения переменной $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
без аргумента изменит заголовок окна терминала на предыдущую команду.Ссылки и примеры: