Як уникнути тильди ~ у підказці Баша?


12

Я хотів би усунути відображення тильди в межах змінної PS1.

Мій поточний рядок PS1:

PS1="\h:\w\n$"

І підказка виглядає приблизно так:

lnx-hladky:/tmp/plugtmp
$

Мені не подобається, що каталог $ HOME відображається у вигляді тильди. Чи можна цього уникнути?

Це спричиняє проблеми, наприклад:

lnx-hladky:~/DOC
$  

Документація говорить:

\w : the current working directory, with $HOME abbreviated with a tilde 
\W: the basename of the current working directory, with $HOME abbreviated with a tilde

Чи є можливість уникнути скорочення $ HOME скороченим тильдом?

Я знайшов один із способів, але мені здається, що це дуже складно:

PROMPT_COMMAND='echo -ne "\e[4;35m$(date +%T)\e[24m$(whoami)@$(hostname):$(pwd)\e[m\n"'
PS1=$

Чи може хтось запропонувати краще рішення? У мене таке відчуття, що не зовсім нормально виконувати так багато команд, щоб отримати швидке повідомлення. (дата, whoami, ім'я хоста, pwd).


які «проблеми» викликає тильд у прикладі?
JBallin

Відповіді:


11

bash виконує розширення в підказці; просто переконайтесь, що їм уникнути.

PS1='\h:$(pwd)\n$'

Це відповідає на моє запитання. Я не знав, що існує така можливість. Велике спасибі, Ігнасіо!
Jirka

2
@Jirka: Ви також можете використовувати: `PS1 = '\ h: $ PWD \ n $'.
Призупинено до подальшого повідомлення.

1
Рішення Jirka виконується pwdв кожному підказку. Рішення Денніса не робить, просто витягує змінну середовище PWD, що значно дешевше.
Stéphane Gourichon

2
pwdявляє собою bash вбудований. Твердження, яке ${PWD}"набагато дешевше", ніж $(pwd)без доказів.
Vineet

1
@anxieux: вам потрібно цитувати поодинокі цитати, а не подвійні цитати
weberjn

0

Не потрібно запускати стільки команд, як ви показали у своєму прикладі. bashнадає ярлики більшості згаданих вами речей.

Ваш приклад:

PROMPT_COMMAND='echo -ne "\e[4;35m$(date +%T)\e[24m$(whoami)@$(hostname):$(pwd)\e[m\n"'
PS1=$

можна переписати як:

PS1='\e[4;35m\t\e[24m\u@\h:\w\e[m\n'

Там, де \tвідображається час (у 24-годинному форматі), \uвідображається поточне ім’я користувача, '\ h' відображається ім'я хоста - bashсторінка man обговорює ці та інші залишки, доступні для вашого запиту.

Навіть якщо ви розгорнули ~цілий шлях до повного шляху, якщо ви не знаєте, який користувач виконує команду, і ви регулярно перемикаєте користувачів, ви можете створити проблеми з дозволами на файли або з дозволами на виконання.


Привіт, мій намір полягав у заміні \ w повним шляхом, включаючи FULL $ HOME шлях. Завдяки Ігнасіо я зараз використовую PS1 = '\ e [4; 35m \ t \ e [24m \ u @ \ h: $ (pwd) \ e [m \ n $', який вирішив мою проблему :-)
Jirka

Ідеально - мені подобається в тому числі, \uщоб я знав, хто я. Не забудьте прийняти відповідь Ігнасіо - поставте прапорець ліворуч від питання.
Doug Harris

Дякую за підказку. Я новачок на цьому форумі. Це чудове місце.
Jirka

\ u @ \ h: $ PWD (зверніть увагу на двокрапку) можна використовувати як вхід для scp
weberjn

0

Я використовую нижче налаштування у своєму .bash_profile-файлі

$ export PS1='\e[1;34m\D{%T %d.%m.%Y} \[\033[00;39m\]\u\[\033[00;32m\]@$IP:\[\033[00;33m\]$(pwd)/\n\\$\[\033[00m\] '

21:40:08 14.12.2017 vmware@10.112.202.228:/home/vmware/Downloads/
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.