อย่าใช้คำสั่ง commandlinefu จากคำตอบอื่น ๆ : มันไม่ปลอดภัย¹และไม่มีประสิทธิภาพ²หากคุณใช้bash
ให้ใช้ฟังก์ชันต่อไปนี้แทน .bashrc
จะทำให้พวกเขาถาวรทำให้พวกเขาเป็นของคุณ โปรดทราบว่าฉันใช้ลำดับ glob เพราะในตัวและง่าย โดยทั่วไปแล้วคำสั่ง glob คือตัวอักษรในพื้นที่ส่วนใหญ่แม้ว่า คุณจะได้รับข้อความแสดงข้อผิดพลาดหากไม่มีไดเรกทอรีถัดไปหรือก่อนหน้า โดยเฉพาะอย่างยิ่งที่คุณจะเห็นข้อผิดพลาดหากคุณพยายามnext
หรือขณะที่อยู่ในไดเรกทอรีรากprev
/
## 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
}
¹ไม่สามารถจัดการชื่อไดเรกทอรีที่เป็นไปได้ทั้งหมด แยกls
เอาท์พุทจะไม่ปลอดภัย
² cd
อาจไม่จำเป็นต้องมีประสิทธิภาพมากนัก แต่ 6 กระบวนการค่อนข้างมากเกินไป
[[ -n $foundcwd ]]
คำตอบของคุณจะทำงานภายใต้ bash และ zsh อย่างเท่าเทียมกัน ดีมากและขอขอบคุณที่เขียนสิ่งนี้