Я не могу вспомнить, где, но я уже видел, как текущий путь командной строки интересным образом сокращается: каждый каталог, содержащийся в пути (за исключением последнего), заменяется только его первой буквой. Например: path/to/some/directory
будет сокращено до p/t/s/directory
.
Как я могу воспроизвести это поведение?
После проигрывания с этим некоторое время я получил ответ, которого Вы требуете:
Добавьте это к своему .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$
Усекать все имена каталогов кроме последнего:
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
}
Перерывы регулярных выражений для лучшего ответа (Меер Борг) для однобуквенных каталогов, например:
echo "/home/user/x/next_dir/other_dir" | sed -r 's|/(..)[^/]*|/\1|g'
/ho/us/x//ot
Правильная функция будет :
PS1='$(eval "sps")$ '
sps() {
echo "$PWD" | sed -r 's|/([^/]{,2})[^/]*|/\1|g'
}
Извините нет репутации, чтобы комментировать под первоначальным ответом, lol
сократите все имена кроме последнего без Python:
user:/h/u/D/C/current$
sps() {
echo `dirname $PWD` | sed -r 's|/(.)[^/]*|/\1|g'
}
PS1='\u:$$(eval "sps")/\W\$ '