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

43

Je voudrais afficher le chemin actuel dans l'invite sh (pas shell bash), qui ne montre actuellement que "#", j'ai essayé avec l'introduction de cette

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

et

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

dans /etc/profile.

Mais il est évident que cela ne s’actualise pas lorsque le répertoire est modifié ou que l’utilisateur change. S'il vous plaît suggérer un moyen de rendre cette dynamique.

Bleamer
la source
1
Notez que chacun $()exécute un programme distinct; il serait plus rapide d'utiliser des variables d'environnement, telles que $LOGNAME, $HOSTNAMEet à la $PWDplace.
grawity
Une solution consistait à utiliser des guillemets simples au lieu de guillemets doubles. Cependant, c'est tout à fait la réponse correcte. Ce que vous voulez vraiment faire, c'est différer l'évaluation du code contenu dans votre invite jusqu'à son utilisation.
MaasSql
Tout ce dont vous avez besoin est d’utiliser l’export "PS1 =" $ (whoami) @ $ (nomhôte): $ (pwd)> ", puis éditez / etc / profile et ajoutez cette ligne à la fin.
SDsolar

Réponses:

76

Les substitutions de commandes entre guillemets "sont immédiatement étendues. Ce n'est pas ce que vous voulez pour votre invite. Les guillemets simples 'préservent les substitutions $PS1qui ne sont ensuite développées 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 (aucune évasion nécessaire):export PS1='$(whoami)@$(hostname):$(pwd)$ '

mpy
la source
1
A travaillé comme un charme après avoir remplacé "set" par "export" dans votre réponse, export PS1='$(whoami)@$(hostname):$(pwd)$'j'ai enregistré les modifications dans /etc/profile. Merci.
Bleamer
Bleamer: a settravaillé pour moi (mais je n'avais pas de natif sh). Mais je vais le changer pour exportse conformer à votre configuration.
mpy
2
Y a-t-il un moyen de rendre cela permanent? Actuellement, je dois le faire chaque fois que je me connecte. Merci!
the.ufon
3
Vous avez mis cette ligne à /etc/profile(voir question) ou ~/.profile?!
mpy
+1, cependant, il faudrait un délimiteur à la fin. En l'état, vous obtenez quelque chose comme foo@localhost:/home/fools -lalors de l'utilisation ls -la.
phresnel
12
sh-4.2$ export PS1="\u@\h:\w>"
jenny@serenity:~>cd /usr/local
jenny@serenity:/usr/local>
Jenny D
la source
1
Je crains que cela fonctionne pour shell bash pas pour sh, quand je fais cela, je reçois \u@\h:\w>comme invite de commande
Bleamer
1
Doit être une version différente de sh; comme vous pouvez le voir sur la première ligne, cela a fonctionné pour moi dans sh 4.2.
Jenny D
1
C'est peut-être le cas. Ce shell est de Busy Box. Merci. Appréciez votre aide cependant.
Bleamer
Bleamer, cela fonctionne pour moi avec BusyBox v1.19.4 built-in shell (ash).
cjm
Merci pour la réponse @cjm, même si je vais éviter de creuser davantage.
Bleamer
5

Cette commande fonctionne pour moi.

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


\ u = nom d'utilisateur
\ h = nom d'hôte
\ W Nom du dossier actuel (chemin d'accès complet)

Rangsiman
la source
+1 pour le paramètre \ W
Dimitry K
3

On pourrait envisager de pimenter l'invite 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\]\$ '
Arvid
la source
1
C'est ce que je cherchais. J'espère que tout le monde aime les couleurs de la vie :)
Govind Kailas
Au moins je le fais. ;)
Arvid
1

Une solution consistait à utiliser des guillemets simples au lieu de guillemets doubles. Cependant, ce n'est pas tout à fait la bonne réponse. Ce que vous voulez vraiment faire, c'est différer l'évaluation du code dans votre invite jusqu'à son utilisation.

set PS1="$(pwd)" 

définit l'invite sur 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 sur 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 littéral, l'invite est rompue car elle a été définie de manière statique.

MaasSql
la source
1

Utilisez la commande ci-dessous pour définir comme dans cpanel.

exportez PS1='$(whoami)@${HOSTNAME%%.*} [$ (pwd)] # '

Milan
la source
Merci! Aucune des autres options ci-dessus n'a fonctionné. Celui-ci l'a fait. Me rendait fou. Merci d'avoir sauvé ma santé mentale. HA!
Lee_Str