2013-05-29 09:56:16 +0000 2013-05-29 09:56:16 +0000
43
43

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

Je voudrais afficher le chemin actuel dans l'invite de commande du 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)"

dans /etc/profile.

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

Réponses (6)

77
77
77
2013-05-29 10:05:04 +0000

Les substitutions de commandes entre guillemets doubles " sont immédiatement développées. Ce n'est pas ce que vous voulez pour votre message. Les guillemets simples ' conserveront les substitutions dans $PS1 qui ne seront 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 habituel du dollar et un espace à la fin de votre invite, ajoutez simplement $ à la fin (pas besoin de s'échapper) : export PS1='$(whoami)@$(hostname):$(pwd)$ '

14
14
14
2013-05-29 10:07:44 +0000
sh-4.2$ export PS1="\u@\h:\w>"
jenny@serenity:~>cd /usr/local
jenny@serenity:/usr/local>
5
5
5
2017-06-25 05:27:44 +0000

Cette commande fonctionne pour moi.

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

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

3
3
3
2018-11-23 13:35:39 +0000

On pourrait envisager de personnaliser 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\]\$ '
1
1
1
2015-10-21 12:29:41 +0000

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

export PS1=‘$(whoami)@${HOSTNAME%%.*} [$(pwd)]# ’ ‘

1
1
1
2014-10-27 14:49:59 +0000

L'une des réponses a été d'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 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 réglé sur la valeur littérale de $(pwd).

Test / Comprendre cela 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 est cassée car elle a été définie de manière statique