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?
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
Ç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
PS1="$PWD> "
ne met pas à jour l'invite après uncd
. Peut-être sur vos autres systèmescd
est un alias qui met à jour PS1.pouvez-vous vous assurer que vous exécutez vraiment bash, et pas une sorte de busybox?
devrait vous montrer la coquille. (Je suppose que / bin / bash)
alors vous pouvez regarder avec
s'il pointe quelque part (un lien) ou s'il s'agit de l'exécutable réel
la source
Peut-être parce que sur les autres machines, vous avez quelque chose comme
la source