55 votes

Comment afficher le chemin actuel dans l'invite de commande dans sh de linux (pas bash) ?

Je voudrais afficher le chemin actuel dans l'invite sh (pas bash Shell), qui actuellement affiche juste "#", J'ai essayé d'introduire ceci

env PS1="$(whoami)@$(hostname):$(pwd)"

et

set PS1="$(whoami)@$(hostname):$(pwd)"

sur /etc/profile .

Mais comme il est évident que cela ne se rafraîchit pas lorsque le répertoire est modifié ou que l'utilisateur change. Veuillez suggérer un moyen de rendre cette fonction dynamique.

88voto

mpy Points 24817

Substitutions de commandes entre guillemets doubles " se développer immédiatement. Ce n'est pas ce que vous voulez pour votre message. Des guillemets simples ' préservera les substitutions dans $PS1 qui ne sont ensuite développés que lors de l'affichage de l'invite. Cela devrait donc fonctionner :

export PS1='$(whoami)@$(hostname):$(pwd)'

Si vous voulez le signe dollar habituel et un espace à la fin de votre invite, ajoutez simplement $ à la fin (pas d'échappement nécessaire) : export PS1='$(whoami)@$(hostname):$(pwd)$ '

15voto

Jenny D Points 540
sh-4.2$ export PS1="\u@\h:\w>"
jenny@serenity:~>cd /usr/local
jenny@serenity:/usr/local>

7voto

Cette commande fonctionne pour moi.

export PS1="\u@\h: \W:$"


\u = nom d'utilisateur
\h = nom d'hôte
\W Nom du dossier présent (pas le chemin complet)

6voto

Anthony O. Points 1268

On peut envisager d'améliorer le message en ajoutant des couleurs. Par exemple :

export PS1='\[\e[0;36m\]\u\[\e[0m\]@\[\e[0;33m\]\h\[\e[0m\]:\[\e[0;35m\]\w\[\e[0m\]\$ '

1voto

MaasSql Points 121

Une réponse consistait à utiliser des guillemets simples au lieu de guillemets doubles, mais ce n'est pas tout à fait la bonne réponse. Ce que vous voulez vraiment faire, c'est reporter l'évaluation du code contenu dans votre invite jusqu'à ce que l'invite soit utilisée.

set PS1="$(pwd)" 

définit l'invite dans le répertoire de travail à partir de la commande set.

set PS1="\$(pwd)" 

ne développe PAS $(pwd). Au lieu de cela, PS1 est défini comme la valeur littérale de $(pwd).

Testez / Comprenez ceci en exécutant :

echo $PS1

. Si vous voyez la chaîne : $pwd, votre invite fonctionne. Si vous voyez le chemin d'accès littéral, l'invite ne fonctionne pas car il a été défini de manière statique.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X