所以我有以下脚本,它将在 dmenu 中显示我的书签,然后在 Firefox 中打开所选项目。
#!/bin/sh
declare -a bookmarks
bookmarks=(
https://www.reddit.com/
https://www.youtube.com/
https://github.com/
https://www.veganricha.com/
)
input="$2"
addnew() {
bookmarks+=("$input")
}
while getopts a: option; do
case "${option}" in
a) addnew && exit 0 ;;
esac
done
menu="dmenu -i -l 10 -p "Bookmarks""
items=$(printf '%s\n' "${bookmarks[@]}" | $menu )
[ -n "$items" ] && firefox $items || exit 0
当您使用 -a 标志运行它时,您可以将一个项目添加到列表中(在我的例子中是最后复制的项目)
./bookmarks -a $(xclicp -o)
它确实添加了该项目。我想要的是将更改写入脚本。因此使用标志的新添加的项目-a
将被写入脚本中。
我尝试和搜索了很多但无法弄清楚,希望有人能帮忙
先感谢您
答案1
与其修改脚本本身,不如将书签放在单独的文件中并修改该文件,例如卡西莫多评论
您可以通过将脚本修改为如下所示来完成此操作:
#!/bin/sh
bookmark_file=~/bookmark_list
declare -a bookmarks
bookmarks=($(<$bookmark_file))
input="$2"
addnew() {
echo $input >> $bookmark_file
}
while getopts a: option; do
case "${option}" in
a) addnew && exit 0 ;;
esac
done
menu="dmenu -i -l 10 -p "Bookmarks""
items=$(printf '%s\n' "${bookmarks[@]}" | $menu )
[ -n "$items" ] && firefox $items || exit 0
并将书签放在文件中,可以通过更改变量~/bookmark_list
轻松更改存储书签的文件bookmark_file