Tôi đã viết một kịch bản có tên xyzzy
để làm điều này:
#!/bin/bash
i="$1"
i=$((${i//[^0-9]/}))
i="$(($i-1+0))"
b="$2"
b=$((${b//[^0-9]/}))
b="$(($b-1+0))"
if [ -z "$XYZZY_INDEX" ]; then
XYZZY_INDEX="$((-1))"
fi
if [ ! -f "/tmp/xyzzy.list" ]; then
touch /tmp/xyzzy.list
chmod a+rw /tmp/xyzzy.list
fi
readarray -t MYLIST < /tmp/xyzzy.list
showHelp(){
read -r -d '' MYHELP <<'EOB'
xyzzy 1.0
A command for manipulating escape routes from grues. Otherwise known as a useful system admin
tool for storing current directories and cycling through them rapidly. You'll wonder why this
wasn't created many moons ago.
Usage: xyzzy [options]
help/-h/--help Show the help.
this/-t/--this Store the current directory in /tmp/xyzzy.list
begone/-b/--begone Clear the /tmp/xyzzy.list file. However, succeed with a number and
it clears just that item from the stored list.
show/-s/--show Show the list of stored directories from /tmp/xyzzy.list
. # Use a number to 'cd' to that directory item in the stored list. This syntax is odd:
. xyzzy 2
...would change to the second directory in the list
. [no options] Use the command alone and it cd cycles through the next item in the stored
list, repeating to the top when it gets to the bottom. The dot and space before xyzzy
is required in order for the command to run in the current shell and not a subshell:
. xyzzy
Note that you can avoid the odd dot syntax by adding this to your ~/.bashrc file:
alias xyzzy=". xyzzy"
and then you can do "xyzzy" to cycle through directories, or "xyzzy {number}" to go to a
specific one.
May you never encounter another grue.
Copyright (c) 2016, Mike McKee <https://github.com/volomike>
EOB
echo -e "$MYHELP\n"
}
storeThis(){
echo -e "With a stroke of your wand, you magically created the new escape route: $PWD"
echo "$PWD" >> /tmp/xyzzy.list
chmod a+rw /tmp/xyzzy.list
}
begoneList(){
if [[ "$b" == "-1" ]]; then
echo "POOF! Your escape routes are gone. We bless your soul from the ever-present grues!"
>/tmp/xyzzy.list
chmod a+rw /tmp/xyzzy.list
else
echo -n "Waving your wand in the dark, you successfully manage to remove one of your escape routes: "
echo "${MYLIST[${b}]}"
>/tmp/xyzzy.list
chmod a+rw /tmp/xyzzy.list
for x in "${MYLIST[@]}"; do
if [[ ! "$x" == "${MYLIST[${b}]}" ]]; then
echo "$x" >> /tmp/xyzzy.list
fi
done
fi
}
showList(){
echo -e "These are your escape routes:\n"
cat /tmp/xyzzy.list
}
cycleNext(){
MAXLINES=${#MYLIST[@]}
XYZZY_INDEX=$((XYZZY_INDEX+1))
if [[ $XYZZY_INDEX > $(($MAXLINES - 1)) ]]; then
XYZZY_INDEX=0
fi
MYLINE="${MYLIST[${XYZZY_INDEX}]}"
cd "$MYLINE";
}
switchDir(){
MYLINE="${MYLIST[${i}]}"
cd "$MYLINE";
}
if [[ "$@" == "" ]];
then
cycleNext
fi;
while [[ "$@" > 0 ]]; do case $1 in
help) showHelp;;
--help) showHelp;;
-h) showHelp;;
show) showList;;
-s) showList;;
--show) showList;;
list) showList;;
this) storeThis;;
--this) storeThis;;
-t) storeThis;;
begone) begoneList;;
--begone) begoneList;;
*) switchDir;;
esac; shift
done
export XYZZY_INDEX
Cách tôi sử dụng là sao chép vào /usr/bin
thư mục và sau đó chmod a+x
vào nó. Sau đó, tôi chỉnh sửa ~/.bashrc
tệp gốc và tài khoản người dùng của mình để bao gồm các dòng này ở dưới cùng:
alias xyzzy='. xyzzy'
alias xy='. xyzzy'
'Xy' là một dạng rút gọn của lệnh để gõ nhanh hơn.
Sau đó, tôi có thể lưu trữ thư mục hiện tại trong danh sách với ...
xyzzy this
... Và lặp lại khi cần thiết. Khi tôi điền danh sách này vào các thư mục tôi cần, chúng sẽ ở đó cho đến khi tôi khởi động lại máy tính vì đó là khi / tmp bị xóa lần nữa. Sau đó tôi có thể gõ ...
xyzzy show
... Để liệt kê các thư mục hiện đang lưu. Để chuyển sang một thư mục, tôi có hai lựa chọn. Một tùy chọn là chỉ định đường dẫn theo chỉ mục (và đó là chỉ mục dựa trên 1) như vậy:
xyzzy 2
... sẽ chuyển sang thư mục đó là mục thứ hai trong danh sách. Hoặc, tôi có thể bỏ số chỉ mục và chỉ cần làm:
xyzzy
... để có vòng lặp qua từng thư mục mà tôi cần. Để biết thêm các lệnh bạn có thể làm, gõ:
xyzzy help
Tất nhiên, công việc thú vị hơn với những câu nói ngớ ngẩn mà tôi đã thêm vào.
Lưu ý rằng xyzzy là một tham chiếu đến cuộc phiêu lưu văn bản Hang động Collosal , trong đó việc nhập xyzzy sẽ cho phép bạn chuyển đổi giữa hai phòng trong trò chơi để tránh các mối đe dọa.
$CDPATH
có lẽ?