Comment changer la valeur de PS1.

0

Je suis connecté en tant que racine d'une machine Linux 2.6.18. J'ai changé la valeur de PS1 en tant que:

export PS1="$PWD> "

Cela fonctionne et code l’invite de commande en tant que répertoire de base suivi d’un >. Maintenant, je veux qu'il montre le répertoire actuel sur lequel je suis.

Comment je régler ceci? Existe-t-il un document expliquant les codes expliquant le fonctionnement de la variable PS1?

VSN
la source

Réponses:

3

Essaye ça

export PS1 = "[\ w] $"

ici

w représente le répertoire de travail actuel

pour plus d'informations voir ceci lien


Edit: Ce sont les caractères spéciaux que bash comprend dans PS1 et PS2

\a : an ASCII bell character (07)
\d : the date in "Weekday Month Date" format (e.g., "Tue May 26")
\D{format} : the format is passed to strftime(3) and the result is inserted into 
             the prompt string; an empty format results in a locale-specific time 
             representation. The braces are required
\e : an ASCII escape character (033)
\h : the hostname up to the first '.'
\H : the hostname
\j : the number of jobs currently managed by the shell
\l : the basename of the shell’s terminal device name
\n : newline
\r : carriage return
\s : the name of the shell, the basename of $0 (the portion following the final 
     slash)
\t : the current time in 24-hour HH:MM:SS format
\T : the current time in 12-hour HH:MM:SS format
\@ : the current time in 12-hour am/pm format
\A : the current time in 24-hour HH:MM format
\u : the username of the current user
\v : the version of bash (e.g., 2.00)
\V : the release of bash, version + patch level (e.g., 2.00.0)
\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
\! : the history number of this command
\# : the command number of this command
\$ : if the effective UID is 0, a #, otherwise a $
\nnn : the character corresponding to the octal number nnn
\\ : a backslash
\[ : begin a sequence of non-printing characters, which could be used to embed a 
     terminal control sequence into the prompt
\] : end a sequence of non-printing characters
max
la source
Ça a marché! Merci! Mais pourquoi $ PWD n'a-t-il pas travaillé ici, mais ailleurs?
VSN
@VSN: Parce que $ PWD a été développé au moment où vous avez défini PS1. Considérez ceci: "export MYPROMPT = aaa; export PS1 =" $ MYPROMPT ". Cela définirait votre invite à" aaa ". Si vous exportez ensuite MYPROMPT = bbb, votre invite ne changera pas car PS1 n'a stocké que le contenu de MYPROMPT, pas une référence à la variable MYPROMPT.
Terje Mikal
@Terje Mikal: Je vois. Mais comment PS1 = "$ PWD & gt;" fonctionne-t-il sur les autres machines Linux, alors? En suivant cette philosophie, cela ne devrait fonctionner nulle part. Pouvez-vous penser à une raison quelconque?
VSN
@RedGrittyBrick: C'est une information très utile. Merci beaucoup! Pourriez-vous penser à une raison pour laquelle cela ne fonctionne pas ici mais ailleurs?
VSN
@VSN Sur mes systèmes Linux, PS1="$PWD> " ne met pas à jour l'invite après un cd. Peut-être sur vos autres systèmes cd est un alias qui met à jour PS1.
RedGrittyBrick
0

pouvez-vous vous assurer que vous exécutez vraiment bash, et pas une sorte de busybox?

echo $SHELL

devrait vous montrer la coquille. (Je suppose que / bin / bash)

alors vous pouvez regarder avec

ls -l /bin/bash

s'il pointe quelque part (un lien) ou s'il s'agit de l'exécutable réel


la source
J'ai vérifié. Je courais / bin / bash /
VSN
0

Cela fonctionne sur d'autres machines Linux. Je ne sais pas pourquoi ça ne marche pas ici.

Peut-être parce que sur les autres machines, vous avez quelque chose comme

$ PS1="\$(pwd)> "
/tmp> cd /
/>
RedGrittyBrick
la source