Показывать только текущее имя каталога (не полный путь) в приглашении 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 

Измените \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)' 
  • Отправка файла через netcat
  • Bash: отображает каждый размер подкаталога в формате списка с помощью 1 строки?
  • Объединяя SSD и жесткий диск в программном RAID1?
  • Каков наилучший способ клонирования раздела Linux на меньший раздел?
  • Изменение временной зоны по командной строке
  • Как распечатать большую страницу на нескольких более мелких страницах?
  • Связывание мультимедийных клавиш
  • Запустить скрипт при выходе из системы / выключения ubuntu
  • Как зашифровать файл или каталог в Linux?
  • Как предотвратить автоматическое монтирование разделов в Linux (Mint)?
  • Как я могу запустить несколько сеансов экрана автоматически?
  • Давайте будем гением компьютера.