tcsh
'dan bash
'a yeni taşındım ve özellikle %c02
(ellipsis
da ayarlanmış) kullanarak dizin kısaltma istemi seçeneklerini özledim.Bash komut istemi kısaltması
PROMPT_DIRTRIM
'un hemen hemen doğru olanı olduğunu görüyorum (elips, bence hariç) ancak sadece bash
3 (OS X'de). Toplam uzunluğu kısaltan this recipe elsewhere on SO'u buldum, bu yüzden beğenmediğim dizinlerin ortasındaki yol adlarını kırarım.
yüzden bu geldi:
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")\$ '
Çalışıyor:
blackat:~$ cd ~/Library/Application\ Support/Apple
blackat:.../Application Support/Apple$
Ama açık for (())
döngü ile bash
için yenice ve mutsuz değilim; ancak, bölünmüş elts
dizisinin son girişlerine, dir adlarındaki boşluklarla doğru bir şekilde ilgilenen başka bir yol bulamadım (ör. ${elts[@]:${start}}
kullanarak). Bunu veya diğer iyileştirmeleri yapmak için herhangi bir ipucu var mı?
Bash bir programlama dilidir. –
@Jonathan Leffler: Anlaştık - bu, kapanmak için iki oya karşılık oldu! –
Ve Bash programlama ile ilgili soruların programlama soruları olduğunu ve bu nedenle de Stack Overflow'da konu olduğunu onaylıyorum. Kabuk programlama ile ilgili konu dışı konuyla ilgili soruları kapatmak önemli bir problemdi; bu günlerde, bunun gerçekleştiğini görmüyorum, ama bu sadece onu kaçırdığım anlamına gelebilir ve her zaman olur.FWIW: Uzun istemleri sevmiyorum: Yolculuğu hiçbir şekilde istemiyorum. Bir makinede 'sfenks' istemi 'Sphinx JL: 'dir. Mac terminali ile, terminal başlık çubuğunda yolunuzu bulabilirsiniz (Özellikler -> Pencere ve Başlık bölümüne bakın). –