Показывать только текущее имя каталога (не полный путь) в приглашении bash
Способ настройки моей подсказки bash показывает весь путь к текущему каталогу. Это раздражает, когда я глубоко внутри дерева каталогов, так как запрос становится настолько длинным, что каждая команда завершается в следующую строку. Как заставить его показывать только последнюю часть пути?
Это то, что у меня есть в моем .bashrc
:
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\[email protected]\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ ' # If this is an xterm set the title to [email protected]:dir case "$TERM" in xterm*|rxvt*) PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}: ${PWD/$HOME/~}\007"' ;; *) ;; esac
- Изменение размеров разделов LVM
- Как открыть меню с «Open Terminal Here» в Ubuntu 10.04, щелкнув левой кнопкой мыши на рабочем столе или внутри папки?
- Быстрый способ adduser и userdel на нескольких машинах
- Могут ли два пользователя одновременно делиться одним ПК
- Как получить список идентификаторов процессов в системе в командной строке linux?
- Пакетное преобразование PNG в JPG в Linux
- Linux: узнайте, какой процесс использует всю оперативную память?
- Выполнение команд параллельно с ограничением одновременного количества команд
- Приоритет сети Ubuntu
- Как мне сопоставить долю сети с помощью терминала Linux?
- Разрешения в цепочке выполнения программы
- Как ограничить использование компьютера?
- Какие файлы запускаются при входе в систему или перезагрузке моей машины?
Измените \w
(нижний регистр) на \W
(верхний регистр):
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\[email protected]\h\[\033[00m\]:\[\033[01;34m\]\W\[\033[00m\]\$ ' ^^ this one waaaaaay over here ------------------------------------------------+
Посмотрите на Bash Prompt HOWTO для получения множества интересных деталей. пример:
[email protected]:/usr/local/bin$ echo $PS1 ${debian_chroot:+($debian_chroot)}\[\033[01;31m\]\[email protected]\h\[\033[00m\]:\[\033[01;36m\]\w\[\033[00m\]\$ [email protected]:/usr/local/bin$ export PS1='${debian_chroot:+($debian_chroot)}\[\033[01;31m\]\[email protected]\h\[\033[00m\]:\[\033[01;36m\]\W\[\033[00m\]\$ ' [email protected]:bin$
Переменная PROMPT_COMMAND
, если установлена, – это команда, которая запускается перед отображением подсказки, указанной в PS1
. В вашем случае PROMPT_COMMAND
запускает инструкцию echo
с определенными escape-последовательностями ANSI, которые управляют заголовком Xterm .
Если вы подозреваете, что PROMPT_COMMAND
переопределяет ваш запрос PS1
, вы можете unset
его и проверить:
$ unset PROMPT_COMMAND
Наконец, убедитесь, что вы меняете определение PS1
которое действительно используется. Обычными являются /etc/bash.bashrc
, /etc/profile
, ~/.bashrc
, ~/.bash_profile
, ~/.profile
. Системные файлы обычно (но не всегда) выполняются перед пользовательскими файлами.
Простая команда замены bash
${VAR/pattern_to_find/pattern_to_replace}
Для показа последнего каталога вы можете просто сделать ${PWD/*\//}
, т. Е. Найти любую вещь до и включая последнюю « /
» и заменить ее ничем.
На моей машине ubuntu я использую:
export PS1='$(whoami):${PWD/*\//}#'.
Мое решение состоит в том, чтобы показать три верхние и нижние каталоги, когда их больше 5
Итак, моя подсказка (которая имеет иную информацию) выглядит так:
08:38:42 durrantm U2017 /home/durrantm/Dropbox/_/rails/everquote
Когда мой pwd на самом деле
/home/durrantm/Dropbox/93_2016/work/code/ruby__rails/rails/everquote
Моя подсказка PS1 настроена следующим образом:
HOST='\[\033[02;36m\]\h'; HOST=' '$HOST 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\]$(git_branch)\[\033[00m\]\n\$ ' PS1=$TIME$USER$HOST$LOCATION$BRANCH
git_branch
– это функция, которая показывает текущую ветвь git, я сохраняю ее в своих dotfiles, это:
git_branch () { git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/' }
Я считаю, что этот вариант намного проще, просто делая:
echo $PWD | rev | cut -d '/' -f 1 | rev
Поэтому назначьте это переменной PS1 в файле .bashrc:
PS1='$(PWD | rev | cut -d '/' -f 1 | rev)'