Як я можу відобразити абсолютний шлях у підказці bash?


50

На даний момент я 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?)
Девід Б

\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

+1 Дякую! Ви можете, будь ласка, пояснити магію у вашій прекрасній лінії баш ("підказка")?
Девід Б

Звичайно. Я використовував tput (див. Man tput для отримання додаткової інформації), щоб змінити кольори, а не писати керуючі символи безпосередньо, для читабельності та переносимості (?). Також я видалив подвійні лапки та зворотні риски, використовуючи одинарні лапки. Нарешті, використовуючи змінну, я уникнув надмірності.
cYrus


0

в басі PS1; -W повинен бути відносним, а -w абсолютним, тож у вищесказаному ви вже повинні мати абсолют ?!

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


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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.