Come evitare tilde ~ nel prompt di Bash?


12

Vorrei rimuovere la tilde dalla visualizzazione all'interno della variabile PS1.

La mia stringa PS1 corrente:

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

E il prompt è simile al seguente:

lnx-hladky:/tmp/plugtmp
$

Non mi piace che la directory $ HOME sia visualizzata come tilde. Questo può essere evitato?

Causa problemi, esempio:

lnx-hladky:~/DOC
$  

La documentazione dice:

\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

C'è qualche possibilità per evitare che $ HOME sia abbreviato con una tilde?

Ho trovato un modo per aggirare ma mi sento come se fosse troppo complicato:

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

Qualcuno può proporre una soluzione migliore? Ho la sensazione che non sia del tutto OK eseguire così tanti comandi solo per essere rapidi. (Data, whoami, hostname, pwd).


quali "problemi" provoca la tilde nell'esempio?
JBallin,

Risposte:


11

bash esegue le espansioni nel prompt; assicurati solo di sfuggirli.

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

Questo risponde alla mia domanda. Non sapevo che ci fosse una tale possibilità. Grazie mille, Ignacio!
Jirka,

2
@Jirka: puoi anche usare: `PS1 = '\ h: $ PWD \ n $'.
In pausa fino a ulteriore avviso.

1
La soluzione di Jirka viene eseguita pwdsu ogni prompt. La soluzione di Dennis no, recupera semplicemente la variabile di ambiente PWD, che è molto più economica.
Stéphane Gourichon,

2
pwdè un built-in bash. L'affermazione che ${PWD}è "molto più economica" di quanto non $(pwd)sia evidente.
Vineet

1
@anxieux: devi fare virgolette con virgolette singole, non doppie virgolette
weberjn,

0

Non è necessario eseguire tutti i comandi mostrati nell'esempio. bashfornisce scorciatoie per la maggior parte delle cose che hai citato.

Il tuo esempio:

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

può essere riscritto come:

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

Dove \tmostra l'ora (nel formato 24 ore), \umostra il nome utente corrente, '\ h' mostra il nome host - la bashpagina man ne discute e il resto delle fughe disponibili per il tuo prompt.

Anche se si espande il ~percorso completo, se non si conosce l'utente che esegue il comando e si cambiano regolarmente gli utenti, è possibile creare problemi con le autorizzazioni dei file o delle autorizzazioni eseguibili.


Ciao, la mia intenzione era di sostituire \ w con il percorso completo incluso il percorso FULL $ HOME. Grazie a Ignacio ora sto usando PS1 = '\ e [4; 35m \ t \ e [24m \ u @ \ h: $ (pwd) \ e [m \ n $' che ha risolto il mio problema :-)
Jirka,

Perfetto - Mi piace includerlo in \umodo da sapere chi sono. Non dimenticare di accettare la risposta di Ignacio: fai clic sulla casella di controllo a sinistra della domanda.
Doug Harris,

Grazie per il suggerimento. Sono nuovo di questo forum. È un posto magnifico.
Jirka,

\ u @ \ h: $ PWD (nota i due punti) può essere usato come input per scp
weberjn

0

Sto usando l'impostazione di seguito nel mio file .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/
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.