Bash変数を使用して、ブックマークシステムを作成できます。変数はどのコマンドでも機能し、bashは変数名をタブ補完します。bashの新しいバージョンでは、変数名に/が追加されている場合、変数に含まれるパスもタブ補完することができます。
mydir=/home/chris/dir
ls $my # Tab completion works on variable name.
ls $mydir/ # Tab completion is equivalent to that with ls /home/chris/dir/
# (doesn't work in older versions of bash).
永続化するために、変数宣言は.bashrcをソースとするファイルに保存できます。このファイルはbashスクリプトであるため、などの他の変数を参照する宣言aur="${HOME}/AUR"
、または特定のホストif [[ $HOSTNAME == foo ]]; then bar=baz; fi
でのみ実行される宣言を含めることができます。これは、複数のホストおよびユーザー間で構成ファイルを再利用する場合に役立ちます。
次のbash関数(.bashrcに追加するか、.bashrcから取得する)を使用すると、ブックマークをブックマークファイルに追加したり、ブックマークファイルから削除したりできます。これはかなり新しく、バグがないことを保証するものではありません。
bookmark_file=~/.bookmarks
source "$bookmark_file"
bm() {
usage='Usage:
bm add <name> <path> Create a bookmark for path.
bm add <name> Create a bookmark for the current directory.
bm update Source the bookmark file.
bm remove <name> Remove a bookmark'
case $1 in
add)
local path
if [[ $# -eq 2 ]]; then
path=.
elif [[ $# -eq 3 ]]; then
if [[ -e $3 ]]; then
path="$3"
else
echo "bm: ${3}: No such file or directory."
return 1
fi
else
echo "$usage"
return 1
fi
if declare | grep "^${2}=" > /dev/null; then
echo "bm: The name $2 is in use."
return 1
fi
path=$(readlink -f "$path")
echo ${2}=\""$path"\" >> "$bookmark_file"
eval ${2}=\""$path"\"
return 0
;;
update)
if [[ $# -eq 1 ]]; then
source "$bookmark_file"
return 0
fi
;;
remove)
if [[ $# -eq 2 ]]; then
unset $2
local contents=$(grep -v "^${2}=" "$bookmark_file")
echo "$contents" > "${bookmark_file}.tmp"
rm -f "$bookmark_file"
mv "${bookmark_file}.tmp" "$bookmark_file"
return 0
fi
;;
esac
echo "$usage"
return 1
}