Как я могу сократить приглашение командной строки (bash)?


167

В настоящее время это:

michael@Castle2012-Ubuntu-laptop01:~/Dropnot/webs/rails_v3/linker/spec/controllers$

За пределами переименования моей машины и структуры каталогов ...

Как я мог сделать это что-то вроде:

michael:controllers$

Ответы:


242

Чтобы изменить его только для текущего экземпляра терминала

Просто введите PS1='\u:\W\$ 'и нажмите Enter.


Чтобы изменить это "навсегда"

В вашем ~/.bashrc, найдите следующий раздел:

if ["$ color_prompt" = yes]; тогда
    PS1 = '$ {debian_chroot: + ($ debian_chroot)} \ [\ 033 [01; 32m \] \ и @ \ ч \ [\ 033 [00m \]: \ [\ 033 [01; 34m \] \ ш \ [\ 033 [00m \] \ $ '
еще
    PS1 = '$ {debian_chroot: + ($ debian_chroot)} \ u @ \ h: \ w \ $'
фи

Удалите @\hи замените \wего заглавными буквами \W, чтобы оно стало:

if ["$ color_prompt" = yes]; тогда
    PS1 = '$ {debian_chroot: + ($ debian_chroot)} \ [\ 033 [01; 32m \] \ и \ [\ 033 [00m \]: \ [\ 033 [01; 34m \] \ W \ [\ 033 [00m \] \ $ '
еще
    PS1 = '$ {debian_chroot: + ($ debian_chroot)} \ u: \ W \ $'
фи

Сохраните, выйдите, закройте терминал и запустите другой, чтобы увидеть результат.


Тонны больше вариантов!

  • Смотрите здесь для более подробного руководства, с большим количеством опций
  • Посмотрите этот ответ, чтобы узнать, как использовать крошечный скрипт Python для установки приглашения, чтобы сокращение происходило только тогда, когда вы глубоко в структуре каталогов.

1
У вас также может быть много информации ... и затем возврат каретки в конце, как в unix.stackexchange.com/q/88780/10043
Майкл Даррант,

Есть ли способ сделать это глобальным? Другими словами, если я буду использовать sudo для другого пользователя, перенесет ли этот параметр настройки, но только для себя (т. Е. Не для пользователя, когда они обычно используют свою учетную запись)?
ctote

Для того, чтобы иметь общий .bashrc, который работает как на Linux, так и на OSX, я с тех пор перешел на unix.stackexchange.com/a/127800/10043
Майкл Даррант

то есть HOST='\033[02;36m\]\h' HOST=' '$HOST parse_git_branch () { git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'; } TIME='\033[01;31m\]\t \033[01;32m\]' LOCATION=' \033[01;34m\]pwd | sed "s # (/ [^ /] \ {1, \} / [^ /] \ {1, \} / [^ /] \ {1, \} /). * (/ [^ /] \ { 1, \} / [^ /] \ {1, \}) / \ {0,1 \} # \ 1_ \ 2 # g "' BRANCH=' \033[00;33m\]$(parse_git_branch)\[\033[00m\]\n\$ ' PS1=$TIME$USER$HOST$LOCATION$BRANCH PS2='\[\033[01;36m\]>'
Майкл Даррант

но посмотрите ответ для фактического кода для использования.
Майкл Даррант

104

Запустите этот код в текущем терминале

PROMPT_DIRTRIM=3

Теперь в приглашении bash будут отображаться только последние 3 имени каталога. Вы можете выбрать 1, чтобы показать только текущий каталог. Более подробная информация доступна в документации GNU .

Эффект:

/var/lib/apt/lists# PROMPT_DIRTRIM=3
/.../lib/apt/lists# 

Если вы хотите сделать это навсегда, добавьте следующую строку ~/.bashrcв начале:

PROMPT_DIRTRIM=3

или другое число больше нуля.


7
Просто sidenote: для этого требуется Bash 4.
Stefan Lasiewski

Хорошо ... Я добавил для этого bach_alias (с функцией), promptdir() { PROMPT_DIRTRIM=$1; }чтобы облегчить жизнь ...
dgoosens

18

Это мой предпочтительный параметр приглашения:

добавлено в ~/.bashrc

PS1='[\u@\h \W]\$ '    

это выглядит так:

[user@hostname dirname]$

(с пробелом после $знака)


Как бы я добавил пробел между каждым словом? Кроме того, я могу покрасить это?
Даниэль Спрингер,

6

Лично я предпочитаю видеть только текущую папку в приглашении bash. Я могу сделать это с помощью следующей команды:

PS1='\W\$ '

Если вы хотите, чтобы оно вступало в силу после каждого запуска, добавьте приведенную выше команду в ваш ~ / .bashrc.


1

Я понимаю, что это очень старый, но так как никто не предложил создать псевдоним, я решил опубликовать. Используя Bash Prompt Escape-последовательности, я создал псевдонимshorten

В ~/.bash_aliasesздесь вы заметите $ Синего вар , чтобы установить быстрый цвет , который вы можете опустить или изменить на основе предпочтений , я также очистить терминал при вызове укоротить.

alias c='clear'

alias shorten='PS1="$Blue$USER:\W$ "&& c'

Чтобы получить желаемую строку приглашения ОП:

alias shorten='PS1="$USER:\W$ "'

У меня есть цвета, определенные в ~/.bashrcкопии и вставленные из https://wiki.archlinux.org/index.php/Color_Bash_Prompt . На заметку, что с цветами кода ANSI? Я смущен, просто глядя на это.

Blue='\e[0;34m'         # Blue

Пошаговое руководство для этого было бы очень полезно, так как я понятия не имею, как добраться до .bash_aliases. Спасибо
Kayote

2
"" Префикс указывает на скрытый каталог или файл. Тильда "~" является краткой формой переменной $ HOME. Итак, «~ / .bash_aliases» - это просто краткая форма «/home/$USER/.bash_aliases». Чтобы открыть «.bash_aliases», вы можете либо открыть терминал и набрать «gedit /home/$USER/.bash_aliases» или «gedit ~ / .bash_aliases», либо в домашнем каталоге введите ctrl-h, чтобы показать скрытые файлы и открыть файл напрямую. , Надеюсь, это поможет. Вы можете также выполнить поиск в Google для поиска полезных псевдонимов.
Элли Карвер

0

Я написал функцию, которую вы можете изменить в соответствии со своими потребностями:

function termprompt() {
    PS1="${PS1//@\\h/}"     # Remove @host
    PS1="${PS1//\\w/\\W}"   # Change from full directory to last name
}

Поместите эту функцию в или около нижней части ~/.bashrcпосле того, как PS1линия была полностью вычислена.

Вы будете печатать termpromptвсякий раз, когда захотите сократить вашу подсказку или, termpromptпозвонив снизу, чтобы получить ~/.bashrcпостоянство.

Преимущество этого метода перед многими другими ответами заключается в том, что его .bashrcможно настроить PS1четырьмя различными способами (xterm + no-color, xterm + color, no-xterm + no-color, no-xterm + color). Этот ответ поддерживает все четыре текущих метода и, возможно, будущие методы тоже.

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.