Вопрос или проблема
Я настроил командную строку, чтобы отображать текущую директорию с некоторым цветом и полным путем. Теперь я хочу установить заголовок моего окна только на имя директории (не полный путь). Не могли бы вы посоветовать, как это сделать в korn shell? Спасибо.
Способ, который я нашел для этого, заключается в создании псевдонима для команды cd. Я поместил следующий код в файл .profile
, и это сработало:
cd() { command cd "$@"; echo -ne "\033]0;${PWD##*/}\007"; }
Согласно этому сайту: Как изменить заголовок xterm: примеры для разных оболочек
ksh предоставляет мало возможностей для функций и расширений, поэтому нам необходимо вставлять последовательность экранирования в подсказку, чтобы она обновлялась динамически. Этот пример создает заголовок в формате username@hostname: directory и подсказку вида ksh$ .
case $TERM in xterm*) HOST=`hostname` PS1='^[]0;${USER}@${HOST}: ${PWD}^Gksh$ ' ;; *) PS1='ksh$ ' ;; esac
Однако $PWD выводит полный путь директории. Мы можем удалить префикс $HOME/ из директории, используя конструкцию ${…##…}. Мы также можем использовать ${…%%…}, чтобы обрезать имя хоста:
HOST=`hostname` HOST=${HOST%%.*} PS1='^[]0;${USER}@${HOST}: ${PWD##${HOME}/}^Gksh$ '
Обратите внимание, что ^[ и ^G в строке подсказки являются одиночными символами для ESC и BEL (их можно ввести в emacs с помощью C-q ESC и C-q C-g).
Ответ или решение
Для изменения заголовка терминала в KornShell (ksh) без изменения строки запроса (prompt), вы можете использовать несколько подходов. Давайте рассмотрим одно из решений по вашему запросу, как изменить заголовок окна терминала, чтобы отображалось только имя текущего каталога, а не полный путь.
Решение через создание алиаса для cd
Вы упомянули о создании алиаса для команды cd
, что позволяет автоматически обновлять заголовок окна терминала при смене каталога. Вот пример реализации, который можно добавить в файл .profile
:
cd() {
command cd "$@"
echo -ne "\033]0;${PWD##*/}\007"
}
Объяснение решения:
-
Функция
cd
: Мы создаем функцию с именемcd
, чтобы переопределить стандартную команду. Эта функция сначала выполняет обычную командуcd
, чтобы сменить каталог. -
Обновление заголовка: Используем
echo
для отправки специальной ESC-последовательности в терминал с помощью\033]0;${PWD##*/}\007
.\033]0;
: Начало последовательности для установки заголовка окна.${PWD##*/}
: Извлечение только имени текущего каталога из полного пути (в${PWD}
хранится полный путь).\007
: Символ BEL, который завершает последовательность.
Этот подход позволяет сохранять заданную вами цветную настройку строки приглашения, при этом отдельно обновляя заголовок окна.
Общее объяснение по KornShell:
KornShell предоставляет ограниченные возможности для динамической модификации строк приглашения и заголовка окна, особенно по сравнению с другими шеллами, такими как Bash или Zsh. Однако с помощью специальных ANSI-escape последовательностей можно управлять заголовками в совместимых с xterm терминалах (например, терминалы в Unix/Linux системах).
Если вы хотите использовать стандартное изменение заголовка и при этом сохранить кастомизацию строки запроса, обратите внимание на особенности работы с переменными и эскейп-последовательностями в ksh. Например, для отображения имени пользователя и короткого имени хоста в заголовке, можно использовать код:
HOST=`hostname`
HOST=${HOST%%.*}
PS1=$'\033]0;${USER}@${HOST}: ${PWD##*/}\007ksh$ '
Это решение предоставляет базовые инструменты для взаимодействия с терминалом KornShell. Старайтесь всегда тестировать изменения в конфигурационных файлах в новых сессиях терминала, чтобы убедиться в правильности работы и избежать сбоев.
Заключение
Хотя KornShell менее гибок по части работы с заголовками окон по сравнению с другими шеллами, правильное использование скриптов и настроек позволяет добиться необходимого функционала. Надеюсь, предложенные решения соответствуют вашим требованиям и помогут в настройке вашей рабочей среды.