Мой терминал имеет быстрый формат по умолчанию как этот:
username@boxname/path/to/current/directory $
Код, который производит, это похоже на это: (это имеет некоторые определения цветов также),
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[01;34m\] \w \$\[\033[00m\]'
Если путь к текущему каталогу становится слишком длинным, становится неприятно работать с терминалом, потому что Вы постоянно повреждаете строки. В таких случаях я предпочел бы формат, который производит более короткую строку как этот:
username@boxname current_dir_name $
Код, который производит, это было бы похоже на это (снова с цветом):
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[01;34m\] $(basename ${PWD}) \$ \[\033[00m\]'
Делает любой знает, как я мог легко переключить формат текущего окна терминала от одного стиля до другого, просто введя, например: prompttoggle
?
Сохраните и свое длинное и короткое PS1
переменные под другим именем:
PS1short='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[01;34m\] \w \$\[\033[00m\]'
PS1long='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[01;34m\] $(basename ${PWD}) \$ \[\033[00m\]'
Удостоверяются, что установили PS1
на одного из них первоначально:
PS1="$PS1long"
Затем можно сделать псевдоним как это для переключения между двумя значениями PS1:
alias prompttoggle='if test "$PS1" = "$PS1long" ; then PS1="$PS1short" ; else PS1="$PS1long" ; fi'
<час> Добавление всех четырех строк к Вашему ~/.bashrc
файл будет ake команда, доступная на Ваших сессиях Bash, здесь быть ими снова для более легкого копирования:
PS1short='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[01;34m\] \w \$\[\033[00m\]'
PS1long='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[01;34m\] $(basename ${PWD}) \$ \[\033[00m\]'
PS1="$PS1long"
alias prompttoggle='if test "$PS1" = "$PS1long" ; then PS1="$PS1short" ; else PS1="$PS1long" ; fi'
Можно использовать крошечное bash
функция:
prompttoggle () {
if [[ $PS1 = *basename* ]]; then
export PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[01;34m\] \w \$\[\033[00m\]'
else
export PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[01;34m\] $(basename ${PWD}) \$ \[\033[00m\]'
fi ;}
функция выше соответствий, если ток $PS1
содержит basename
, если да, то PS1
без basename
установлен иначе, тот с basename
установлен.
Помещенный функция в Ваш ~/.bashrc
для получения его доступный на всех интерактивных сессиях.
Пример:
foo@bar:~/spam/egg$ prompttoggle () {
> if [[ $PS1 = *basename* ]]; then
> export PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[01;34m\] \w \$\[\033[00m\]'
> else
> export PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[01;34m\] $(basename ${PWD}) \$ \[\033[00m\]'
> fi ;}
foo@bar:~/spam/egg$ prompttoggle
foo@bar egg $ prompttoggle
foo@bar ~/spam/egg $
Или... сделайте два очень крошечные функции и добавьте в конец Вашего ~/.bashrc
# short prompt
promptshort() { export PS1=$(echo "$PS1" | sed 's/\\w/\\W/g') ; }
# full length prompt
promptlong() { export PS1=$(echo "$PS1" | sed 's/\\W/\\w/g') ; }
для сокращенной подсказки, типа promptshort
, для возвращения к полному пути, тип promptlong
\W
показывает текущий рабочий каталог только, таким образом $(basename ${PWD})
излишество, по моему скромному мнению
, Вы могли объединиться в одну функцию, но "длинный", и "короткий" являются описательными, и у обоих есть меньше нажатий клавиш, чем "переключатель" ;)
Вместо того, чтобы добавить строку для переопределения PS1, я предпочитаю настраивать код, который устанавливает его (например, некомментарий force_color_prompt=yes
, и отредактируйте строку после [ "$color_prompt" = yes ]; then
)
Вот ~/.bashrc
функциональное определение, которое я лично использую для сбрасывания/переключения моей подсказки от регулярной подсказки всего до $
. Адаптируйте его по мере необходимости для удовлетворения потребностям.
resetps() {
if [ "$PS1" = "$ " ]
then
PS1=$OLDPS1
else
OLDPS1=$PS1
export OLDPS1
PS1="$ "
fi
}
Это - решение Вашей проблемы (длинные каталоги повреждают командную строку), и не конкретно к Вашему вопросу (как изменить командную строку на лету.)
я решил эту проблему несколько лет назад с этой подсказкой:
PS1='\[\e[32;1m\]$? \u@\h \[\e[35;1m\]\w\[\e[m\]\n\$ '
# └──green───┘ └──purple──┘ └─norm─┘
, Что это делает:
, Это дает Вам все пространство, в котором Вы нуждаетесь для своей команды, не смещает его правильный, когда Вы находитесь в глубокой структуре каталогов, не искажает строку ввода с цветовыми кодами (избегающий странных ошибок, которые иногда происходят), все еще давая Вам цветную подсказку, на где вывод одной законченной команды и следующая начатая: