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


13

Я часто запускаю команди паралельно, які потребують тривалого часу, щоб закінчити, а іноді я втрачаю інформацію про те, що працює там, оскільки вони виводять в основному таку ж інформацію на екран.

Чи знаєте ви будь-яким способом дізнатися, яка команда працює в якому терміналі?


1
Не впевнений, що це все-таки працює, але це може допомогти, крім відмінної відповіді @dessert. → askubuntu.com/questions/774532/…
Videonauth

Відповіді:


12

Взято з Bash - Оновіть назву термінала, виконавши другу команду · U&L і трохи змінивши:

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

Цей DEBUGсигнал (ab) використовує сигнал як тригер для оновлення заголовка з останнім записом з вашої історії, тобто останньою командою, яку ви виконали, за допомогою керуючої послідовності 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 без аргументу змінить назву вікна терміналу на попередню команду.

Посилання та приклади:

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.