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

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

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

9
задан 2 April 2015 в 15:52

4 ответа

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

Добавьте это к своему .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$ 
8
ответ дан 2 April 2015 в 15:52

Усекать все имена каталогов кроме последнего:

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
}
3
ответ дан 2 April 2015 в 15:52

Перерывы регулярных выражений для лучшего ответа (Меер Борг) для однобуквенных каталогов, например:

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

0
ответ дан 2 April 2015 в 15:52

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

user:/h/u/D/C/current$ 
sps() {
    echo `dirname $PWD` | sed -r 's|/(.)[^/]*|/\1|g'
}
PS1='\u:$$(eval "sps")/\W\$ '
1
ответ дан 23 November 2019 в 04:59

Другие вопросы по тегам:

Похожие вопросы: