Переключить формат строки приглашения терминала гнома командой?

Мой терминал имеет быстрый формат по умолчанию как этот:

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?

9
задан 7 September 2016 в 15:30

5 ответов

Сохраните и свое длинное и короткое 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'
10
ответ дан 23 November 2019 в 04:46

Можно использовать крошечное 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 $
7
ответ дан 23 November 2019 в 04:46

Или... сделайте два очень крошечные функции и добавьте в конец Вашего ~/.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)

5
ответ дан 23 November 2019 в 04:46

Вот ~/.bashrc функциональное определение, которое я лично использую для сбрасывания/переключения моей подсказки от регулярной подсказки всего до $. Адаптируйте его по мере необходимости для удовлетворения потребностям.

resetps() {
    if [ "$PS1" = "$ " ] 
    then
        PS1=$OLDPS1 
    else
        OLDPS1=$PS1 
        export OLDPS1 
        PS1="$ " 
    fi 
} 
3
ответ дан 23 November 2019 в 04:46

Это - решение Вашей проблемы (длинные каталоги повреждают командную строку), и не конкретно к Вашему вопросу (как изменить командную строку на лету.)

я решил эту проблему несколько лет назад с этой подсказкой:

PS1='\[\e[32;1m\]$? \u@\h \[\e[35;1m\]\w\[\e[m\]\n\$ '
#    └──green───┘         └──purple──┘  └─norm─┘

, Что это делает:

  1. производит значение выхода предыдущей команды (это невероятно полезно)
  2. , производит текущего пользователя, и хост в одном цвете
  3. произвел рабочий каталог в другом цвете (скорректируйте цвета к своему вкусу)
  4. производит доллар и пространство на новой строке , заканчивая цветные последовательности перед разрывом строки

, Это дает Вам все пространство, в котором Вы нуждаетесь для своей команды, не смещает его правильный, когда Вы находитесь в глубокой структуре каталогов, не искажает строку ввода с цветовыми кодами (избегающий странных ошибок, которые иногда происходят), все еще давая Вам цветную подсказку, на где вывод одной законченной команды и следующая начатая:

enter image description here

1
ответ дан 23 November 2019 в 04:46

Другие вопросы по тегам:

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