Как изменить значение PS1.

3895
VSN

Я вошел в систему как корень компьютера с Linux 2.6.18. Я изменил значение PS1 как:

export PS1="$PWD> " 

Он работает и жестко кодирует командную строку как домашний каталог, за которым следует >. Теперь я хочу, чтобы он показывал текущий каталог, в котором я сейчас нахожусь.

Как мне установить это? Есть ли документ, который объясняет коды, объясняющие, как работает переменная PS1?

0

3 ответа на вопрос

3
max

Попробуй это

export PS1 = "[\ w] $"

Вот

w представляет текущий рабочий каталог

для получения дополнительной информации смотрите эту ссылку


Редактировать: это специальные символы, которые bash понимает в PS1 и PS2

\a : an ASCII bell character (07) \d : the date in "Weekday Month Date" format (e.g., "Tue May 26") \D : 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 
That worked! Thanks! But why did $PWD not work here, but elsewhere? VSN 11 лет назад 0
@VSN: Because $PWD was expanded at the time you set PS1. Consider this: "export MYPROMPT=aaa; export PS1="$MYPROMPT". This would set your prompt to "aaa". If you then "export MYPROMPT=bbb" your prompt will not change because PS1 only stored the contents of MYPROMPT, not a reference to the variable MYPROMPT. Terje Mikal 11 лет назад 0
@Terje Mikal: I see. But how does PS1="$PWD> " work on other Linux machines, then? Going by this philosophy, it shouldn't work anywhere. Can you think of any reason? VSN 11 лет назад 0
@RedGrittyBrick: Это очень полезная информация. Большое спасибо! Не могли бы вы придумать причину, почему это не работает здесь, но в другом месте это работает? VSN 11 лет назад 0
@VSN On my Linux systems, `PS1="$PWD> "` does not update the prompt after a `cd`. Maybe on your other systems `cd` is an alias which updates PS1. RedGrittyBrick 11 лет назад 0
0

Можете ли вы убедиться, что вы действительно запускаете bash, а не какой-нибудь busybox вообще?

echo $SHELL 

должен показать вам оболочку. (Я предполагаю / bin / bash)

тогда вы можете посмотреть с

ls -l /bin/bash 

если он указывает где-то еще (ссылка) или если это фактический исполняемый файл

I did check. I was running /bin/bash/ VSN 11 лет назад 0
0
RedGrittyBrick

Это работает на других машинах Linux. Я не знаю, почему это не работает здесь.

Возможно, потому что на других машинах у вас есть что-то вроде

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

Похожие вопросы