配列要素を追加した後にスクリプトに変更を書き込む

配列要素を追加した後にスクリプトに変更を書き込む

そのため、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

関連情報