Как получить [ current_path ] в командной строке bash?

Можно ли в командной строке указывать имя текущего рабочего каталога?

Я работаю над OSX и CentOS в нескольких проектах в /srv/..., и ошибка в неправильном каталоге была быстро сделана.

Я бы хотел

[current_path] в моей подсказке как-то, возможно, цветной Это возможно?

Например, как /srv/myproject, он выдаст приглашение [root@server [myproject]#. Это должно остаться прежним даже в /srv/myproject/app/etc

3 ответа

Решение

Это должно быть близко к тому, что вы ищете:

PS1="\$([[ \$PWD == /srv/*/* ]] && p=\${PWD#/*/} && p=[\${p%%/*}]; echo -n \"\$p$ \" )"

Для тестирования используйте это, чтобы показать полный каталог вместе с усеченным для сравнения:

PS1="\$([[ \$PWD == /srv/*/* ]] && p=\${PWD#/*/} && p=[\${p%%/*}]; echo -n \"[\$PWD] \$p$ \" )"

Экранирование приводит к тому, что расширение переменной откладывается до выдачи приглашения. Расширения параметров удаляют каталог первого уровня и все уровни каталога ниже второго уровня.

Вам, вероятно, понадобится:

shopt -s promptvars

но я думаю, что это по умолчанию.

Приглашение выполняет свою работу только тогда, когда вы находитесь в каталоге под /srv

Это один из способов добавить цвет. Это делает название проекта голубым.

PS1="\$([[ \$PWD == /srv/*/* ]] && p=\${PWD#/*/} && p='[\[\033[1;36m\]'\${p%%/*}'\[\033[0m\]]'; echo -n \"\$p$ \" )"

Я использую следующую строку в /etc/bashrc в моих системах Linux. Обычно это вопрос замены буквы W в верхнем регистре на W в большинстве случаев по умолчанию:

PS1="[\u@\h \w]\\$ "

Это дает:

[root@MDMarra /ppro/edi/0010/GOODBI/receive/archive]#  

вместо:

[root@MDMarra archive]#

Последовательность символов для полного текущего рабочего каталога в $PS1 является \w, Смотрите "Совет: быстрое волшебство" для более подробной информации.

Другие вопросы по тегам