Вопрос или проблема
Итак, я ищу способ сократить путь в приглашении, если он достигает определенной длины, например:
user1@localhost:~/Pictures/awesome_trip/
Это было бы нормально, но если мы переходим в более глубокие подкаталоги, такие как:
user1@localhost:~/Pictures/awesome_trip/first_day/mikes_camera/funny_pics
Я хотел бы, чтобы приглашение изменилось на
user1@localhost:/.../funny_pics
Я знаю, как изменить приглашение в .bashrc
Мне было интересно, есть ли способ сделать это динамически, чтобы я мог получить текущую длину рабочего каталога, проверить длину и изменить приглашение. Что-то вроде:
CUR_PROMPT=$(pwd); # получить рабочий каталог
CUR_PROMPT_LENGTH={#CUR_PROMPT}; # получить длину
if[ $CUR_PROMPT_LENGTH -gt 20 ]; then
# если приглашение длинное, вывести короткую версию
PS1='\u@\h:...\w:\$';
else
# иначе вывести длинную версию
PS1='\u@\h:\W:\$'
Надеюсь, есть способ это сделать,
Спасибо за ваш ответ.
Вы можете использовать что-то подобное коду ниже. Просто добавьте это в ваш файл .bashrc в вашей домашней папке. Это в основном сделает ваше приглашение похожим на “user@computername [dir] $”, так что оно может выглядеть как telegonicaxx@laptop [shared] $
export PS1="\u@\h [\W] \\$\[$(tput sgr0)\]"
.
Ответ или решение
Чтобы сократить путь текущего рабочего каталога в командной строке Bash динамически, вам необходимо внести изменения в файл конфигурации .bashrc
, который находится в вашем домашнем каталоге. Это позволит вам настроить приглашение так, чтобы оно автоматически адаптировалось в зависимости от длины пути. Ниже приведен подробный процесс, как этого добиться.
Шаг 1: Откройте файл .bashrc
Для начала вам нужно открыть файл .bashrc
в текстовом редакторе. Вы можете использовать nano
, vim
или любой другой текстовый редактор. Например, для открытия с помощью nano
, выполните следующую команду:
nano ~/.bashrc
Шаг 2: Определение и настройка функции для сокращения пути
Добавьте следующую функцию в конец вашего файла .bashrc
. Эта функция будет определять текущий путь и изменять приглашение в зависимости от его длины.
function set_prompt {
local CUR_PROMPT=$(pwd) # Получаем текущий каталог
local CUR_PROMPT_LENGTH=${#CUR_PROMPT} # Получаем длину пути
if [ $CUR_PROMPT_LENGTH -gt 50 ]; then # Проверяем условие длины пути (можете изменить значение на любое другое)
# Если путь длинный, краткая версия
PS1='\u@\h:...\W\$ ' # Пример: user@host:.../funny_pics$
else
# Если путь короткий
PS1='\u@\h:\w\$ ' # Пример: user@host:/home/user/Pictures/awesome_trip$
fi
}
PROMPT_COMMAND=set_prompt # Обновляем приглашение перед каждым введением команды
Шаг 3: Сохраните и закройте файл
После внесения изменений сохраните файл и закройте текстовый редактор. Если вы используете nano
, нажмите CTRL + X
, затем Y
, чтобы подтвердить сохранение.
Шаг 4: Применение изменений
Чтобы изменения вступили в силу, выполните следующую команду:
source ~/.bashrc
Объяснение кода
-
Функция
set_prompt
: Эта функция считывает текущий рабочий каталог и определяет его длину. Затем она изменяет переменнуюPS1
, которая отвечает за вывод приглашения командной строки, в зависимости от длины пути. -
PROMPT_COMMAND
: Этот встроенный параметр позволяет выполнять определенную команду перед выводом приглашения. В данном случае, мы вызываем функциюset_prompt
. -
PS1
: Это переменная, определяющая, как будет выглядеть ваше приглашение. Мы используем\u
для отображения имени пользователя,\h
для имени хоста и\w
для полного пути. В случае длинного пути, мы используем укороченный вариант с использованием...
.
Заключение
Теперь ваша командная строка будет динамически изменять вывод в зависимости от длины текущего рабочего каталога. Этот подход не только улучшает читаемость вашего приглашения, но и помогает вам быть более организованным в вашей работе. Кроме того, вы всегда можете настроить значение длины или форматирование в соответствии с вашими предпочтениями.