Je suis nouveau sur bash et j'aimerais que mon invite montre quelque chose qui dans tcsh était trivial, mais après une bonne recherche sur google, je ne peux toujours pas le faire.
J'aimerais que mon invite n'inclue que les répertoires actuels et parents comme ceci:
/parent/currentdir $
Dans tcsh, ceci est réalisé par:
set prompt = "%C2 %"
Cependant, en bash jusqu'à présent, j'ai seulement constaté que je dois analyser pwd pour obtenir la même sortie.
N'y a-t-il pas un moyen plus simple, comme faire:
export PS1="$(some_command) $"
PS1='\w \$'; PROMPT_DIRTRIM=2
devrait vous donner l'équivalent bash, mais cela ne fonctionne pas correctement sur mon système.PROMPT_DIRTRIM
a été introduit dans Bash 4 . Je viens de tester sur Ubuntu 16.04 sous WSL et cela a très bien fonctionné!Réponses:
Les fonctionnalités de contrôle rapide de Bash sont plutôt statiques. Si vous voulez plus de contrôle, vous pouvez inclure des variables dans votre invite; assurez-vous que vous n'avez pas désactivé l'
promptvars
option .Notez les guillemets simples: les extensions de variable doivent se produire au moment où l'invite est affichée, pas au moment où la
PS1
variable est définie.Si vous voulez plus de contrôle sur ce qui est affiché, vous pouvez utiliser des substitutions de commande. Par exemple, l'extrait ci-dessus perd l'
~
abréviation du répertoire personnel.Ce code est plutôt lourd, donc au lieu de le coller dans la
PS1
variable, vous pouvez utiliser laPROMPT_COMMAND
variable pour exécuter le code à définirHPWD
, puis l'utiliser dans votre invite.Étant donné que l'invite raccourcie n'a été modifiée que lors d'un changement de répertoire, vous n'avez pas besoin de le recalculer chaque fois qu'une invite s'affiche. Bash ne fournit pas de hook qui s'exécute sur un changement de répertoire en cours, mais vous pouvez le simuler en remplaçant
cd
et ses cousins.Notez que vous n'avez pas besoin d'exporter et que vous ne devez pas l'exporter
PS1
, car il s'agit d'un paramètre shell, et non d'une variable d'environnement. UnPS1
réglage bash ne serait pas compris par les autres obus.PS Si vous voulez une belle expérience de shell interactif, passez à zsh , où tous ces éléments (
%
extensions rapides englobant largement les tcshchpwd
, etc.) sont des fonctionnalités natives.la source
La syntaxe d'obtention des répertoires parent et actuel est tirée de la réponse de Munai .
Cependant, comme l'a noté Gilles, ce code affiche uniquement le répertoire actuel au moment du
.bashrc
chargement, mais il ne changera pas lorsque vous naviguerez sur le système vers d'autres dossiers.Le fait de l'avoir dans votre
.bashrc
fichier rend l'invite automatiquement mise à jour dans votre répertoire actuel:la source
prompt_command()
censée faire quelque chose à elle seule? Ce n'est pas pour moi. Vouliez-vous également l'utiliserprompt_command()
dans les redéfinitions decd
& co, comme Gilles l'a fait? Ou tu voulais direPROMPT_COMMAND='...'
?$PWD
contient un espace./
? Comme écrit, vous obtenez/// $
La chaîne d'invite peut être facilement modifiée en
bash
modifiant la variable shellPS1
. Cela signifie Prompt String 1. Plus d'informations ici .Pour l'instant, lancez votre
bash
coquille.vi ~/.bashrc
Ajoutez la définition PS1 dans le fichier
Plus de tutoriels ici et ici , pour vous aider à le peaufiner encore plus.
la source
.bashrc
chargement, l'invite ne changera pas si vouscd
dans un autre répertoire! @twalbaumPeut être plus simple avec "~" pour le répertoire d'accueil.
la source
la source
Le réglage
PROMPT_DIRTRIM=2
devrait être tout ce dont vous avez besoin.la source