Как я могу отобразить абсолютный путь в командной строке?

50

В настоящее время мой bash PS1настроен на что-то вроде этого:

PS1="\[\`if [[ \$? = "0" ]]; then echo '\e[32m\h\e[0m'; else echo '\e[31m\h\e[0m' ; fi\`:\w\n\$ "

Как я могу заставить его показать абсолютный путь вместо относительного (например, /home/dave/dirвместо ~/dir)?

Дэвид Б
источник
1
/home/dave/dirи ~/dirоба являются абсолютными путями, второй использует аббревиатуру для вашего домашнего каталога. Относительный путь - это путь относительно вашего текущего каталога (например ../dir), а не от root ( /).
Даг Харрис
3
PS Хорошее использование цвета, чтобы указать статус выхода предыдущей команды. Вероятно, первое использование цвета в подсказке, которая мне понравилась.
Даг Харрис
@Doug Harris: Спасибо за исправление. Мне тоже нравится эта раскраска. Не помню, где я впервые увидел это (возможно, в каком-то предыдущем посте SU?)
David B
\u@\H[\w]:~\$делаетuser@host[~/path]:~$
JREAM

Ответы:

49

Просто замените \wна \$PWD:

PS1="\[\`if [[ \$? = "0" ]]; then echo '\e[32m\h\e[0m'; else echo '\e[31m\h\e[0m' ; fi\`:\$PWD\n\$ "

В любом случае, если вы возражаете против небольшого совета, я бы написал что-то вроде:

PS1='\[`[ $? = 0 ] && X=2 || X=1; tput setaf $X`\]\h\[`tput sgr0`\]:$PWD\n\$ '
Кир
источник
4
Я тоже думал об этом, но $PWDоценивается во время назначения PS1, а не при каждом вызове. Однако , если вы избежите знака доллара, это сработает \$PWD. При этом знак доллара является знаком доллара во время назначения, и оценка переменной происходит в каждом приглашении. +1 тебе.
Даг Харрис
Правильно, пропустил это \, я обычно работаю с одинарными кавычками, если это возможно. Спасибо.
cYrus 22.10.10
+1 Спасибо! Не могли бы вы объяснить магию в вашей красивой линии bash («чаевые»)?
Дэвид Б
Конечно. Я использовал tput (для получения дополнительной информации см. Man tput), чтобы изменить цвета, а не писать управляющие символы напрямую, для удобства чтения и переносимости (?). Также я удалил двойные кавычки и обратную косую черту, используя одинарные кавычки. Наконец, используя переменную, я избежал некоторой избыточности.
cYrus 22.10.10
0

в PS1 Баш; -W должен быть относительным, а -w абсолютным, поэтому в приведенном выше у вас уже должен быть абсолютный ?!

http://wiki.archlinux.org/index.php/Color_Bash_Prompt

Sirex
источник
3
Я думаю, что вы путаете абсолютное | относительное с полным | current_dir. Wпоказывает только текущее имя каталога, wпоказывает полный путь, но все еще использует относительные пути.
Дэвид Б
была терминология в URL, а не в моей :)
Sirex
0

Humm ~ / dir - это абсолютный путь, но с использованием «ярлыка». Например, если вы сделаете cd /usr/localэто, скорее всего будет отображаться полный путь к / usr / local. Так или иначе, у вас уже есть полный путь :-)

Но, вероятно, ваш правильный вопрос, как отобразить полный путь без каких-либо ярлыков, таких как ~?

Тем не менее, я не знаю ответа на этот вопрос и, глядя на мужчину, кажется, он есть (по крайней мере, задокументировано).

Гюйгенс
источник
0

Запустите pwdвместо использования \W.

Простая версия:

export PS1="\`pwd\` $ "

Используя это в вашем коде:

export PS1="\[\`if [[ \$? = "0" ]]; then echo '\e[32m\h\e[0m'; else echo '\e[31m\h\e[0m' ; fi\`:\`pwd\`\n\$ "
Даг Харрис
источник
1
второстепенный пункт: согласно руководству по стилю Google, предпочитайте $ (pwd) обратным галочкам, потому что обратные галочки требуют экранирования, а $ () - нет.
funroll