Как избежать тильды в Bash?

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).

Jirka
источник
какие "проблемы" вызывает тильда в примере?
JBallin

Ответы:

11

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

PS1='\h:$(pwd)\n$'
Игнасио Васкес-Абрамс
источник
Это отвечает на мой вопрос. Я не знал, что есть такая возможность. Большое спасибо, Игнасио!
Джирка
2
@Jirka: Вы также можете использовать: `PS1 = '\ h: $ PWD \ n $'.
Приостановлено до дальнейшего уведомления.
1
Решение Jirka выполняется pwdпри каждом запросе. Решение Денниса не делает, просто выбирает переменную окружения PWD, которая намного дешевле.
Стефан Гурихон
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странице руководства обсуждаются эти и остальные экранированные символы, доступные для вашего приглашения.

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

Даг Харрис
источник
Привет, я намеревался заменить \ w на полный путь, включая путь FULL $ HOME. Благодаря Игнасио я теперь использую PS1 = '\ e [4; 35 м \ т \ е [24 м \ u @ \ h: $ (pwd) \ e [м \ n $' ', что решило мою проблему :-)
Йирка
Идеально - мне нравится в том числе, \uчтобы я знал, кто я. Не забудьте принять ответ Игнасио - установите флажок слева от вопроса.
Даг Харрис
Спасибо за подсказку. Я новичок в этом форуме. Это отличное место.
Джирка
\ 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/
Мохаммад Шахид Сиддики
источник