Commandlinefu çözümünü diğer yanıttan kullanmayın : güvensiz VE verimsizdir .² Bunun yerine bash
, sadece aşağıdaki işlevleri kullanın. Onları ısrarcı hale getirmek için onları senin yerine koy .bashrc
. Glob düzenini kullandığımı çünkü yerleşik ve kolay olduğunu unutmayın. Genellikle glob düzeni çoğu yerde alfabetiktir. Bir sonraki veya bir önceki dizin yoksa bir hata mesajı alırsınız. Özellikle, kök dizinde next
veya prev
dizinini denerseniz hatayı görürsünüz /
.
## bash and zsh only!
# functions to cd to the next or previous sibling directory, in glob order
prev () {
# default to current directory if no previous
local prevdir="./"
local cwd=${PWD##*/}
if [[ -z $cwd ]]; then
# $PWD must be /
echo 'No previous directory.' >&2
return 1
fi
for x in ../*/; do
if [[ ${x#../} == ${cwd}/ ]]; then
# found cwd
if [[ $prevdir == ./ ]]; then
echo 'No previous directory.' >&2
return 1
fi
cd "$prevdir"
return
fi
if [[ -d $x ]]; then
prevdir=$x
fi
done
# Should never get here.
echo 'Directory not changed.' >&2
return 1
}
next () {
local foundcwd=
local cwd=${PWD##*/}
if [[ -z $cwd ]]; then
# $PWD must be /
echo 'No next directory.' >&2
return 1
fi
for x in ../*/; do
if [[ -n $foundcwd ]]; then
if [[ -d $x ]]; then
cd "$x"
return
fi
elif [[ ${x#../} == ${cwd}/ ]]; then
foundcwd=1
fi
done
echo 'No next directory.' >&2
return 1
}
Possible Tüm olası dizin adlarını işlemez. Çıkışı ayrıştırma ls
asla güvenli değildir .
² cd
muhtemelen son derece verimli olmak zorunda değildir, ancak 6 işlem biraz fazladır.
[[ -n $foundcwd ]]
cevabınız bash ve zsh altında eşit derecede iyi çalışır. Çok güzel ve bunu yazdığınız için teşekkürler.