配列を読み取るスクリプトを作成しました。最近のディレクトリディレクトリ名は、次の名前の外部設定ファイルから取得されます。default.cfgユーザーはリストからディレクトリを選択するか、新しいディレクトリを入力できます。ユーザーが新しいディレクトリを入力したら、そのディレクトリを配列の最初の場所として保存したいと思います。最近のディレクトリ設定ファイルに再度保存します。default.cfg。スクリプトはこれを実行できますが、現在の形式ではファイルを上書きします。default.cfgしたがって、保存したい他のすべての値が失われます。 ">>"を試しましたが、配列は変更されず、ファイルの末尾に追加されます。
ディレクトリの選択.sh
#!/bin/bash
number=0
source defaults.cfg
for i in "${recentdirs[@]}"
do
#only show the last 5 directories
if [ $number -le 5 ]
then
echo "$number - $i"
number=$((number+1))
else
break
fi
done
read selection
#check if number or string was entered
regpat='^[0-9]+$'
if ! [[ $selection =~ $regpat ]]
then
newdir=( ${selection} )
#merge arrays to have the new entry at the first position
recentdirs=("${newdir[@]}" "${recentdirs[@]}")
#write array back into file
set | grep ^recentdirs > defaults.cfg
else
echo ${recentdirs[$selection]}
fi
defaults.cfgの内容
recentdirs=([0]="/new/folder/" [1]="/folderA/folder1/" [2]="/folderB/folder2/" [3]="/folderX/folder5")
作業バージョンの編集:
#!/bin/bash
number=0
source defaults.cfg
for i in "${recentdirs[@]}"
do
#only show the last 5 directories
if [ $number -le 5 ]
then
echo "$number - $i"
number=$((number+1))
else
break
fi
done
read selection
#check if number or string was entered
regpat='^[0-9]+$'
if ! [[ $selection =~ $regpat ]]
then
newdir=( ${selection} )
#merge and write array back into file with sed
sexp="s[^recentdirs.*[recentdirs=(${newdir[@]} ${recentdirs[@]})["
sed -i -e "$sexp" defaults.cfg
else
echo ${recentdirs[$selection]}
fi
答え1
あなたは交換する必要があります
grep ^recentdirs > defaults.cfg
そして
sexp="s[^recentdirs.*[recentdirs=(${newdir[@]} ${recentdirs[@]})["
sed -i -e "$sexp" defaults.cfg