Я реализовал средство сокращения пути для включения bash в переменную среды PS1, которая сокращает рабочий каталог до чего-то более компактного, но все же описательного.Мне любопытно, какие еще идеи могут существовать.
Вот проблема:
Создайте функцию bash _dir_chomp
, которая может быть включена в PS1 следующим образом (разрывы строк вставлены для удобства чтения):
PS1='\[\033[01;32m\]\u@\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 символов не превышен) /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
, но не скомпилированные программы на Си или аналогичные.Другими словами: внешние исходные файлы не допускаются, код должен быть встроенным.Кратчайшая версия выигрывает.Длина тела функции bash (и вызываемых подфункций) рассчитывает, означает:
_sub_helper() {
# this counts
}
_dir_chomp() {
# these characters count (between { and })
_sub_helper "foobar" # _sub_helper body counts, too
}