Я только что перешел с tcsh
на bash
и, в частности, пропустил параметры запроса на сокращение каталога с помощью %c02
(с установленным также ellipsis
).
Я вижу, что PROMPT_DIRTRIM
делает почти все правильно (кроме многоточия, я думаю), но я только на bash
3 (на OS X). Я нашел этот рецепт в другом месте на SO, который сокращает общую длину, поэтому разбивает пути в середине каталогов, чего я не делал. не нравится.
Итак, я придумал это:
PROMPT_DIRTRIM=2 ## from bash4, but used here
dirtrim()
{
local NAME="$1" start= endelts=
[[ "$NAME" =~ ^"$HOME"(/|$) ]] && NAME="~${NAME#$HOME}" ## $HOME ==> ~
IFS=/ read -ra elts <<< "$NAME"; ## split $PWD on "/"
start=$((${#elts[@]}-${PROMPT_DIRTRIM})) ## first element to retain
if [ ${start} -gt 1 ]; then
for ((i=${start}; i<${#elts[@]}; i++)); do
endelts="${endelts}/${elts[$i]}"; ## concat together the trailing path
done
NAME="...${endelts}"
fi
echo "$NAME"
}
PS1='\h:$(dirtrim "$PWD")\$ '
Оно работает:
blackat:~$ cd ~/Library/Application\ Support/Apple
blackat:.../Application Support/Apple$
Но я новичок в bash
и недоволен явным циклом for (())
; однако я не мог найти другого способа воссоединить последние записи разделенного массива elts
таким образом, чтобы правильно обрабатывать пробелы в именах каталогов (например, используя ${elts[@]:${start}}
). Любые подсказки, чтобы сделать это или другие улучшения?
(Кстати, я думаю, что это это вопрос по программированию, поскольку bash
является языком программирования....)
Sphinx JL:
. С терминалом Mac вы можете указать путь в строке заголовка терминала («Свойства» -> «Окно» и найти раздел «Заголовок»). - person Jonathan Leffler   schedule 28.05.2016