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

381
mthpvg

Я на 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 > 

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

Благодарю.

1

3 ответа на вопрос

2
Mat

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

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

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

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

#! /bin/sh  path1=/home path2=/usr path3=/var  prompt_path() { local path path="$" path="$" path="$" echo "$path" }  prompt_path $HOME prompt_path /usr/local prompt_path /var/tmp 
Кажется, хорошо для меня. Вопрос: если я хочу иметь несколько префиксных путей, я не вижу, как это может работать. Я пишу некоторые сценарии bash, но я не уверен в манипулировании строками ... Я читаю вашу ссылку. mthpvg 12 лет назад 0
Демо Mat полностью отвечает на мой вопрос. Спасибо Мат. Я понял замену по ссылке, которую он дал. mthpvg 12 лет назад 0
1
samir

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

echo $PWD 

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

Это было больше похоже на смену директории несколько раз или копирование вставки с другого терминала. Спасибо, в любом случае. mthpvg 12 лет назад 0
@mthpvg Вам известны инструменты `pushd` и` popd`? Bernhard 12 лет назад 1
Спасибо за это, всегда думал, что это как "CD -" ... это не так. Но это работает только в пределах одного терминала. Я все равно буду его использовать :). mthpvg 12 лет назад 0
0
mthpvg

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

prompt_path 

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

#! /bin/sh path="$" path="$" path="$" echo "$path" 

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

~/.local/bin 

Вы даете право x вашему сценарию:

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 

Похожие вопросы