bash: __vte_prompt_command: команда не найдена

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

Каждый раз, когда я открываю командный терминал или нажимаю Enter, возникает вышеуказанное сообщение об ошибке. Оно не причиняет вреда, но очень раздражает.

~/.bash_profile находится здесь

# .bash_profile
# Получаем алиасы и функции
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# Пользовательская среда и программы запуска

Это область, которая вызывает ошибку в /etc/bashrc

  if [ -e /etc/sysconfig/bash-prompt-xterm ]; then
      PROMPT_COMMAND=/etc/sysconfig/bash-prompt-xterm
  elif [ "${VTE_VERSION:-0}" -ge 3405 ]; then
      PROMPT_COMMAND="__vte_prompt_command"
  else
      PROMPT_COMMAND='printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"'
  fi

Если я добавляю эту строку в ~/.bashrc, проблема решается

source /etc/profile.d/vte.sh

Очевидно, что _vte_prompt_command определен только в vte.sh

__vte_prompt_command() {
  local command=$(HISTTIMEFORMAT= history 1 | sed 's/^ *[0-9]\+ *//')
  command="${command//;/ }"
  local pwd='~'
  [ "$PWD" != "$HOME" ] && pwd=${PWD/#$HOME\//\~\/}
  printf "\033]777;notify;Command completed;%s\007\033]0;%s@%s:%s\007%s" "${command}" "${USER}" "${HOSTNAME%%.*}" "${pwd}" "$(__vte_osc7)"
}

Что эта команда на самом деле делает? Разве эти /etc/profile.d/*.sh не загружаются при запуске? Может кто-то объяснить, почему это ведет себя таким образом?

Из изменения версии gnome-terminal 3.7.0:

Чтобы новые вкладки, открываемые в терминале, имели тот же рабочий каталог, что и текущая вкладка, необходимо, чтобы оболочка, работающая в терминале, сотрудничала. Для этого vte устанавливает скрипт оболочки bash, который вы должны использовать в вашем bash PS1 приглашении. (…)

Я прочитал это на https://bugzilla.redhat.com/show_bug.cgi?id=924275, когда искал такой же вопрос

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

Ошибка bash: __vte_prompt_command: command not found возникает в терминале, когда оболочка Bash не может найти функцию __vte_prompt_command, которая необходима для настройки командного вывода в терминалах, использующих библиотеку VTE (Virtual Terminal Emulator). Давайте разберёмся в причинах возникновения этой проблемы и способах её устранения.

Причины возникновения

  1. Отсутствие загрузки скриптов: Функция __vte_prompt_command определена в файле /etc/profile.d/vte.sh, который, как предполагается, должен загружаться при запуске оболочки. Однако, не все конфигурации и среды автоматически загружают все скрипты в этой директории.

  2. Неверная конфигурация Bash: В вашем файле ~/.bash_profile выполняется загрузка ~/.bashrc (если он существует), но, как видно из предоставленного кода, сам файл ~/.bashrc не содержит команд для запуска скриптов из /etc/profile.d/.

  3. Необходимость условий для использования: В конфигурационном файле /etc/bashrc есть проверка на существование переменной VTE_VERSION, которая должна быть большей или равной 3405, чтобы корректно использовать __vte_prompt_command. Если переменная не установлена или соответствует более низкому значению, возникнет ошибка.

Решение проблемы

Наиболее простое и эффективное решение, как вы уже отметили, заключается в добавлении следующей строки в ваш файл ~/.bashrc:

source /etc/profile.d/vte.sh

Это обеспечит загрузку скрипта vte.sh при каждом запуске оболочки, что, в свою очередь, позволит правильно определять функцию __vte_prompt_command.

Пояснение работы функции

Функция __vte_prompt_command в основном отвечает за обновление заголовка терминала и поддержку историй команд. Она делает несколько вещей:

  • Запрашивает последнюю выполненную команду из истории.
  • Форматирует вывод, чтобы отображать имя пользователя, имя хоста и текущую директорию в заголовке терминала.
  • Уведомляет о завершении команды с помощью специальных ANSI управляющих последовательностей.

Элементы, которые могли бы оказаться полезными при работе с оболочкой и лучше понять, как работает ваше окружение, включают:

  • Функции и показ их наличия: declare -F может помочь вам проверить, загружена ли функция.
  • Вывод информации об окружении: env или printenv даст представление о текущих переменных среды.

Причины поведения загрузки скриптов

Скрипты в директории /etc/profile.d/ обычно загружаются при запуске интерактивной оболочки, но их загрузка может зависеть от конфигурации системы и оболочки, например, если ~/.bashrc явно не содержит строк для их загрузки. Убедитесь, что у вас правильные права доступа и конфигурация для файлов.

Заключение

Устранение ошибки bash: __vte_prompt_command: command not found требует простого добавления команды в ~/.bashrc, что подтянет необходимые функции и уберет сообщение об ошибке. Экспериментируйте с настройками своего окружения, чтобы улучшить его функциональность и удобство.

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

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