Возможно ли иметь переменные среды в пути к рабочему каталогу: PS1?

Я на Lubuntu, и я использую Bash. Мой PS1 (в.bashrc) это:

PS1="\w> "

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

/this/is/a/very/long/path/that/i/want/to/make/shorter >

Я хотел бы установить в моей среде переменные:

$tiavl=/this/is/a/very/long

И тогда я получу:

$tiavl/path/that/i/want/to/make/shorter >

Цель состоит в том, чтобы сделать что-то более короткое в командной строке, но я все еще хочу иметь возможность скопировать, вставить это и сделать:

cd $tiavl/path/that/i/want/to/make/shorter

Это немного похоже на $HOME:

~/path/that/i/want/to/make/shorter  >

Я знаю, где я, и я могу скопировать вставить ~.

Благодарю.

3 ответа

Решение

Вы можете сделать это с помощью небольшой вспомогательной функции, как показано ниже (используйте /home в качестве примера префикс пути):

~ > pwd
/home/me
~ > tiavl=/home
~ > prompt_path () { echo ${1/#$tiavl/\$tiavl}; }
~ > export PS1="\$(prompt_path \w) > "
$tiavl/me > 

Это использует простую функцию манипуляции со строками (см. Здесь много примеров) в функции, чтобы заменить начальную часть пути литералом $tiavl если это соответствует.

Вот демонстрация того, как обновить эту функцию для нескольких путей.

#! /bin/sh

path1=/home
path2=/usr
path3=/var

prompt_path() {
    local path
    path="${1/#$path1/\$path1}"
    path="${path/#$path2/\$path2}"
    path="${path/#$path3/\$path3}"
    echo "$path"
}

prompt_path $HOME
prompt_path /usr/local
prompt_path /var/tmp

Если вы копируете вставить в терминал, вы можете просто использовать переменную окружения $PWD, которая всегда будет показывать вам рабочий каталог.

echo $PWD

показывает рабочий каталог.

В общем, вы делаете скрипт bash:

prompt_path

который содержит:

#! /bin/sh
path="${1/#$path1/\$path1}"
path="${path/#$path2/\$path2}"
path="${path/#$path3/\$path3}"
echo "$path"

Вы помещаете это в папку как:

~/.local/bin

Вы даете х право на ваш скрипт:

chmod u+x prompt_path

В вашем ~ /.bashrc:

1 - вы меняете PS1 на:

PS1="\$(prompt_path \w) > "

2 - вы добавляете эти строки:

export path1=/home
export path2=/usr
export path3=/var

3 - вы указываете, что вы можете вызвать свой скрипт из любой точки мира:

export PATH=~/.local/bin:$PATH

Наконец, вы получаете ваш.bashrc:

. ~/.bashrc
Другие вопросы по тегам