Как я могу сократить текущий путь приглашения bash до одной буквы в каталоге?


9

Я не могу вспомнить, где, но я уже видел, как текущий путь приглашения bash сокращен интересным образом: каждый каталог, содержащийся в пути (за исключением последнего), заменяется только его первой буквой. Например: path/to/some/directoryбудет сокращено до p/t/s/directory.

Как я могу воспроизвести это поведение?


Вы не можете напрямую сделать это в PS1. Вы должны установить PS1переменную ( PS1='${SHORT_PWD}\\$') и обновить эту переменную в $PROMPT_COMMAND.
Жиль "ТАК - перестань быть злым"

@Gilles 'ТАК - перестань быть злым' уверен, что ты можешь сделать это напрямую, если ты используешь двойные кавычки, тебе нужно использовать обратную косую черту \$()подстановок команд
bac0n

Ответы:


8

Поиграв с этим некоторое время, я получил ответ, который вам требуется:

Добавьте это в ваш файл .bashrc в вашем домашнем каталоге, выйдите из терминала и снимите его, и вы получите подсказку.

PS1='$(eval "sps")$ '
sps() {
   echo "$PWD" | sed -r 's|/([^/]{,2})[^/]*|/\1|g'
}

Он использует объявленную функцию sps()для оценки пути каждый раз, когда PS1отображается переменная, которая является подсказкой

т.е.

/ho/de/De/Ap/Ti$ pwd
/home/deth/Desktop/Apps/Tivo
/ho/de/De/Ap/Ti$ 

Или ... если вы настаиваете на одной букве

PS1='$(eval "sps")$ '
sps() {
   echo "$PWD" | sed -r 's|/(.)[^/]*|/\1|g'
}

Который отображает:

/h/d/D/A/T$ pwd
/home/deth/Desktop/Apps/Tivo
/h/d/D/A/T$ 

Спасибо, Меер. Моя подсказка на самом деле удаляет user@pcчасть. Как я могу справиться с этим?
Алекс

3

Чтобы обрезать все имена каталогов, кроме последнего:

PS1='$(eval "sps")$ '                                                                                
sps() {                                                                                              
    python -c "import sys; dirs = sys.argv[1].split('/'); print '/'.join(d[:1] for d in dirs[:-1]) + '/' + dirs[-1]" $PWD
}

Это не работает, когда я меняю каталоги?
Адитья Варма

1

сократить все имена, кроме последнего без Python:

user:/h/u/D/C/current$ 
sps() {
    echo `dirname $PWD` | sed -r 's|/(.)[^/]*|/\1|g'
}
PS1='\u:$$(eval "sps")/\W\$ '
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.