В Ubuntu есть ли способ настроить PS1 так, чтобы он не обновлял заголовок окна?

Вопрос или проблема

Вопрос

У меня есть скрипт под названием title, который устанавливает заголовок окна UNIX, он простой и просто выводит escape-последовательность. См. https://askubuntu.com/a/22417/323009.

#/bin/bash
ESC=$'\e'
BELL='$'\a'
echo "${ESC};$*$BELL"

Чтобы использовать его, я просто ввожу:

title tomcat logs

Чтобы это работало, мне также нужно изменить значение PS1 по умолчанию, поскольку оно нарушает работу title, так как PS1 по умолчанию обновляет ваш заголовок.

Но в данный момент я не устанавливаю PS1 в своем файле $HOME/.bashrc, и мне нравится, как работает PS1, я просто хочу остановить обновление заголовка окна PS1. Какое решение?

Существует ли способ сказать Ubuntu управлять PS1 так, как это делается, но без обновления моего заголовка?

Обходное решение

Моё текущее обходное решение заключается в том, чтобы вручную найти, как это в данный момент установлено.

echo $PS1

А затем отредактировать его, чтобы удалить escape-последовательность, которая обновляет заголовок.

PS1="\u@\h \w: "

Решение, которое я хотел бы иметь

На сегодняшний день я ожидал бы, что это можно будет настроить так, чтобы я мог сказать в своем файле .bashrc. ПРИМЕЧАНИЕ: Putty позволяет это изменить, смотрите https://superuser.com/a/919770/331605

DONT_UPDATE_TITLE=true
 . . . остальная часть нормального .bashrc файла

А код, который устанавливает PS1, не обновлял бы заголовок, но продолжал бы обновлять подсказку PS1 так, как это происходит в данный момент.

Поиск решения

Существует множество вопросов, задающих похожие вопросы, но ни один не задает этот.

Ниже приведены ссылки, которые я нашел полезными, некоторые из StackOverflow, Ubuntu и Superuser.

PS1 может быть установлен в вашем ~/.bashrc. Если он не установлен, вы получаете PS1, который был установлен ранее (см. “Стартовые файлы” в man bash).

Значения, которые вы устанавливаете в PS1, и их эффекты документированы в man bash, в разделе о “Подсказках”.

Посмотрите, что содержится в вашем PS1 с помощью echo "$PS1" | od -bc.

Помимо PS1, когда я хочу такое поведение (обновление заголовка при cd), я заменяю команду cd на функцию bash, определенную в моем ~/.bashrc, которая выполняет cd и устанавливает заголовок. Смотрите type cd, чтобы проверить, была ли ваша команда cd заменена. Функция, которая заменила cd, была определена в одном из стартовых файлов, см. параграф 1.

В большинстве современных дистрибутивов это устанавливается для вас (динамические заголовки) с помощью escape-последовательности. Обычно вы можете найти это в /etc/profile или /etc/bash.bashrc и т.д., вы можете отключить это точно так, как вам нужно, с помощью unset PROMPT_COMMAND в вашем .bashrc

Ответ или решение

В Ubuntu есть возможность настроить переменную PS1 так, чтобы она не обновляла заголовок окна терминала. Для этого существует несколько подходов, которые можно реализовать в вашем файле ~/.bashrc. Давайте разберемся подробнее с этой задачей.

Проблема с заголовком окна и PS1

По умолчанию, многие дистрибутивы Linux, включая Ubuntu, динамически обновляют заголовок терминала при изменении командной строки с помощью escape-последовательностей, которые установлены в переменной PS1. Это может конфликтовать с вашими собственными сценариями, такими как скрипт title, который вы описали.

Настройка PS1 в Ubuntu

  1. Удаление escape-последовательности: Если вам не нужно динамическое обновление заголовка окна, вы можете удалить escape-последовательности из вашей переменной PS1. Для этого выполните следующие шаги:

    Откройте ваш файл ~/.bashrc в текстовом редакторе:

    nano ~/.bashrc

    Найдите строку, содержащую PS1, и уберите все символы, которые начинаются с \[ и \], которые отвечают за изменение заголовка окна. Например:

    PS1='\u@\h \w: '
  2. Использование PROMPT_COMMAND: Если вы хотите продолжать обновлять заголовок окна при использовании команд, таких как cd, вы можете оставить PS1 по умолчанию и использовать альтернативное назначение для PROMPT_COMMAND. Убедитесь, что в вашем ~/.bashrc есть следующая строка:

    unset PROMPT_COMMAND

    Это действие отменит любые существующие команды, которые обновляют заголовок окна.

  3. Пользовательская функция cd: Если вам необходимо, чтобы заголовок окна обновлялся при выполнении команды cd, вы можете создать кастомную функцию в вашем ~/.bashrc, которая будет обеспечивать эту функциональность. Например:

    cd() {
       builtin cd "$@"  # Использовать встроенную команду cd
       title "$(pwd)"   # Обновить заголовок окна
    }

Итоговая настройка ~/.bashrc

Ваш итоговый файл ~/.bashrc может выглядеть следующим образом:

# Отключаем обновление заголовка окна
unset PROMPT_COMMAND

# Функция для обновления заголовка с `cd`
cd() {
    builtin cd "$@"
    title "$(pwd)"  # Обновляем заголовок окна, используя вашу функцию title
}

# Ваш кастомный PS1
PS1='\u@\h \w: '

Заключение

Таким образом, вы можете настроить переменную PS1, чтобы она не обновляла заголовок окна во время работы в терминале Ubuntu. Данный подход позволяет вам сохранить желаемое форматирование командной строки при отключении автоматического обновления заголовка, при этом вы можете использовать свой собственный скрипт для обновления заголовка по мере необходимости. Изменения в файле ~/.bashrc вступят в силу после его перезапуска или выполнения команды source ~/.bashrc.

Оцените материал
Добавить комментарий

Капча загружается...