Я применил кратчайший путь для bash, который будет включен в переменную среды PS1, что сокращает рабочий каталог до более компактного, но все же описательного. Мне любопытно, какие существуют другие идеи.
Здесь проблема:
Создайте функцию bash _dir_chomp
, которая может быть включена в PS1, как это (разрывы строк вставлены для удобочитаемости):
PS1='\[\033[01;32m\]\[email protected]\h\[\033[01;34m\] $(
_dir_chomp "$(pwd)" 20
)\[\033[01;37m\]$(parse_git_branch)\[\033[01;34m\] \$\[\033[00m\] '
с параметром "20", являющимся параметром максимальной длины в качестве мягкого предела. Вот примеры:
-
/usr/portage/media-plugins/banshee-community-extensions/files
становится/u/p/m/b/files
-
/home/user1/media/video/music/live-sets
становится~/m/v/m/live-sets
(обратите внимание на символ ~ в качестве замены для $HOME) -
/home/user2/media
НЕ изменяется (ограничение 20 char не превышено) -
/home/user1/this-is-a-very-long-path-name-with-more-than-20-chars
становится~/this-is-a-very-long-path-name-with-more-than-20-chars
(последний компонент остается без искажений: мягкий предел) -
/home/user1/src
становится~/src
($ HOME всегда сокращается) -
/home/user1/.kde4/share/config/kresources
становится~/.k/s/c/kresources
(обратите внимание, что точка префикса сохраняется)
Текущий пользователь - user1.
Это позволило вызвать внешние интерпретаторы, такие как awk
, perl
, ruby
, python
, но не скомпилированные C-программы или аналогичные. Другими словами: внешние исходные файлы недопустимы, код должен быть встроенным. Побеждает самая короткая версия. Длина тела функции bash (и называется подфункциями) подсчитывается, означает:
_sub_helper() {
# this counts
}
_dir_chomp() {
# these characters count (between { and })
_sub_helper "foobar" # _sub_helper body counts, too
}