Comment éviter tilde ~ dans l'invite Bash?

12

Je voudrais supprimer le tilde de l'affichage dans la variable PS1.

Ma chaîne PS1 actuelle:

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

Et l'invite ressemble à ceci:

lnx-hladky:/tmp/plugtmp
$

Je n'aime pas que le répertoire $ HOME s'affiche en tilde. Cela peut-il être évité?

Cela cause des problèmes, par exemple:

lnx-hladky:~/DOC
$  

La documentation dit:

\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

Y a-t-il une possibilité d'éviter que $ HOME soit abrégé par un tilde?

J'ai trouvé une solution, mais j'ai l'impression que c'est trop compliqué:

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

Quelqu'un peut-il proposer une meilleure solution? J'ai l'impression que ce n'est pas tout à fait OK d'exécuter autant de commandes juste pour être rapide. (date, whoami, nom d'hôte, pwd).

Jirka
la source
quels "problèmes" le tilde cause-t-il dans l'exemple?
JBallin

Réponses:

11

bash exécute des extensions dans l'invite; assurez-vous juste de leur échapper.

PS1='\h:$(pwd)\n$'
Ignacio Vazquez-Abrams
la source
Cela répond à ma question. Je ne savais pas qu'il y avait une telle possibilité. Merci beaucoup, Ignacio!
Jirka
2
@Jirka: Vous pouvez également utiliser: `PS1 = '\ h: $ PWD \ n $'.
pause jusqu'à nouvel ordre.
1
La solution de Jirka s'exécute pwdà chaque invite. La solution de Dennis ne récupère pas seulement la variable d'environnement PWD, ce qui est beaucoup moins cher.
Stéphane Gourichon
2
pwdest un bash intégré. L'affirmation qui ${PWD}est "beaucoup moins chère" que $(pwd)sans preuves.
Vineet
1
@anxieux: vous devez citer avec des guillemets simples, pas des guillemets doubles
weberjn
0

Vous n'avez pas besoin d'exécuter autant de commandes que vous l'avez montré dans votre exemple. bashfournit des raccourcis pour la plupart des choses que vous avez mentionnées.

Votre exemple:

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

peut être réécrit comme:

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

\tindique l'heure (au format 24 heures), \uindique le nom d'utilisateur actuel, «\ h» affiche le nom d'hôte - la bashpage de manuel en discute et le reste des échappements disponibles pour votre invite.

Même si vous développez le ~chemin d'accès complet, si vous ne savez pas quel utilisateur exécute la commande et que vous changez régulièrement d'utilisateur, vous pouvez créer des problèmes avec les autorisations de fichier ou les autorisations exécutables.

Doug Harris
la source
Salut, mon intention était de remplacer \ w par le chemin complet, y compris le chemin FULL $ HOME. Grâce à Ignacio, j'utilise maintenant PS1 = '\ e [4; 35m \ t \ e [24m \ u @ \ h: $ (pwd) \ e [m \ n $', ce qui a résolu mon problème :-)
Jirka
Parfait - j'aime inclure \upour savoir qui je suis. N'oubliez pas d'accepter la réponse d'Ignacio - cochez la case à gauche de la question.
Doug Harris
Merci pour l'astuce. Je suis nouveau sur ce forum. C'est un super endroit.
Jirka
\ u @ \ h: $ PWD (notez les deux points) peut être utilisé comme entrée pour scp
weberjn
0

J'utilise le paramètre ci-dessous dans mon fichier .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
la source