添加数组元素后将更改写入脚本

添加数组元素后将更改写入脚本

所以我有以下脚本,它将在 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

相关内容