Jak uniknąć tylda ~ w monicie Bash?

12

Chciałbym usunąć tyldy z wyświetlania w zmiennej PS1.

Mój obecny ciąg PS1:

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

A monit wygląda następująco:

lnx-hladky:/tmp/plugtmp
$

Nie podoba mi się, że katalog $ HOME jest wyświetlany jako tylda. Czy można tego uniknąć?

Powoduje problemy, na przykład:

lnx-hladky:~/DOC
$  

Dokumentacja mówi:

\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

Czy istnieje możliwość uniknięcia skrótu $ HOME tyldą?

Znalazłem jedno rozwiązanie, ale wydaje mi się, że jest to zbyt skomplikowane:

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

Czy ktoś może zaproponować lepsze rozwiązanie? Mam wrażenie, że uruchamianie tak wielu poleceń nie jest w porządku. (data, whoami, nazwa hosta, pwd).

Jirka
źródło
jakie „problemy” powoduje tylda w przykładzie?
JBallin

Odpowiedzi:

11

bash uruchamia rozszerzenia w wierszu poleceń; po prostu upewnij się, że ich unikniesz.

PS1='\h:$(pwd)\n$'
Ignacio Vazquez-Abrams
źródło
To odpowiada na moje pytanie. Nie wiedziałem, że jest taka możliwość. Wielkie dzięki, Ignacio!
Jirka
2
@Jirka: Możesz także użyć: `PS1 = '\ h: $ PWD \ n $'.
Wstrzymano do odwołania.
1
Rozwiązanie Jirka jest uruchamiane pwdprzy każdym znaku zachęty. Rozwiązanie Dennisa nie, tylko pobiera zmienną środowiskową PWD, która jest znacznie tańsza.
Stéphane Gourichon
2
pwdjest wbudowanym bash. Twierdzenie, które ${PWD}jest „znacznie tańsze” niż $(pwd)bez dowodów.
Vineet,
1
@anxieux: musisz cytować pojedyncze cytaty, a nie podwójne
weberjn
0

Nie musisz uruchamiać tylu poleceń, ile pokazałeś w swoim przykładzie. bashzapewnia skróty do większości wymienionych rzeczy.

Twój przykład:

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

może być przepisany jako:

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

Gdzie \tpokazuje czas (w formacie 24-godzinnym), \upokazuje bieżącą nazwę użytkownika, „\ h” pokazuje nazwę hosta - bashstrona podręcznika omawia je i resztę znaków ucieczki dostępnych dla twojego monitu.

Nawet jeśli rozwiniesz ~pełną ścieżkę, jeśli nie wiesz, który użytkownik uruchamia polecenie, i regularnie zmieniasz użytkowników, możesz tworzyć problemy z uprawnieniami do plików lub uprawnieniami wykonywalnymi.

Doug Harris
źródło
Cześć, moim zamiarem było zastąpienie \ w pełną ścieżką, w tym ścieżką FULL $ HOME. Dzięki Ignacio używam teraz PS1 = '\ e [4; 35m \ t \ e [24m \ u @ \ h: $ (pwd) \ e [m \ n $'], który rozwiązał mój problem :-)
Jirka
Idealnie - lubię włączać, \uaby wiedzieć, kim jestem. Nie zapomnij zaakceptować odpowiedzi Ignacio - kliknij pole wyboru po lewej stronie pytania.
Doug Harris
Dzięki za podpowiedź. Jestem nowy na tym forum. To jest świetne miejsce.
Jirka
\ u @ \ h: $ PWD (zwróć uwagę na dwukropek) może być użyty jako dane wejściowe dla scp
weberjn
0

Korzystam z poniższych ustawień w moim pliku .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/
Mohammad Shahid Siddiqui
źródło