Я новичок в bash и хотел бы, чтобы моя подсказка показывала что-то, что в tcsh было тривиально, но после хорошего поиска в Google я все еще не могу это сделать.
Я хотел бы, чтобы мое приглашение включало только текущие и родительские каталоги, как это:
/parent/currentdir $
В tcsh это достигается путем:
set prompt = "%C2 %"
Однако в bash я обнаружил, что мне нужно разобрать pwd для получения того же результата.
Разве нет более простого способа, например:
export PS1="$(some_command) $"
PS1='\w \$'; PROMPT_DIRTRIM=2
должен дать вам эквивалент bash, но он не работает должным образом в моей системе.PROMPT_DIRTRIM
был введен в Bash 4 . Я только что проверил на Ubuntu 16.04 под WSL, и он работал отлично!Ответы:
Функции быстрого управления Bash довольно статичны. Если вы хотите больше контроля, вы можете включить переменные в ваше приглашение; убедитесь, что вы не отключили эту
promptvars
опцию .Обратите внимание на одинарные кавычки: раскрытие переменных должно происходить во время отображения приглашения, а не во время определения
PS1
переменной.Если вы хотите больше контроля над тем, что отображается, вы можете использовать подстановки команд. Например, приведенный выше фрагмент теряет
~
сокращение для домашнего каталога.Этот код довольно громоздок, поэтому вместо того, чтобы вставлять его в
PS1
переменную, вы можете использоватьPROMPT_COMMAND
переменную для запуска кода, чтобы установитьHPWD
и затем использовать его в своем приглашении.Поскольку сокращенная подсказка изменялась только при смене каталога, вам не нужно пересчитывать ее каждый раз, когда отображается подсказка. Bash не предоставляет ловушку, которая запускается при текущем изменении каталога, но вы можете имитировать его , переопределяя
cd
и его кузенов.Обратите внимание, что вам не нужно и не нужно экспортировать
PS1
, так как это параметр оболочки, а не переменная окружения.PS1
Настройка bash не будет понята другими оболочками.PS Если вы хотите получить приятную интерактивную оболочку, переключитесь на zsh , где все они (быстрые
%
расширения, в основном включающие tcsh иchpwd
т. Д.) Являются встроенными функциями.источник
Синтаксис для получения родительских и текущих каталогов взят из ответа Мунай .
Однако, как отметил Жиль, этот код показывает только текущий каталог,
.bashrc
загруженный во время загрузки, но он не изменится, когда вы перейдете в систему к другим папкам.Наличие этого в вашем
.bashrc
файле делает приглашение автоматически обновленным в текущем каталоге:источник
prompt_command()
должно что-то делать само по себе? Это не для меня. Вы хотели также использоватьprompt_command()
в переопределенияхcd
& co, как это сделал Жиль? Или ты имел ввидуPROMPT_COMMAND='...'
?$PWD
содержит пробел./
? Как написано, вы получаете/// $
Строка подсказки может быть легко изменена
bash
путем редактирования переменной оболочкиPS1
. Это означает «Строка подсказки 1.» Более подробная информация здесь .А пока запусти свой
bash
снаряд.vi ~/.bashrc
Добавить определение PS1 в файл
Больше учебников здесь и здесь , чтобы помочь вам настроить его еще больше.
источник
.bashrc
загрузки, приглашение не изменится, если вы перейдетеcd
в другой каталог! @twalbaumМожет быть проще с "~" для домашнего каталога.
источник
источник
Настройка
PROMPT_DIRTRIM=2
должна быть все, что вам нужно.источник