declare -A ini ini_repo_dirs(){ declare -A repos_location import_repos_conf(){ local repos_conf local conf_file=/etc/portage/repos.conf if [[ -d $conf_file ]] then repos_conf=$conf_file/* else repos_conf=$conf_file fi local sec while IFS= read -r line do if [[ $line =~ ^[[:blank:]]*\[ ]] then line=${line#*[} line=${line%%]*} sec=$line continue fi if [[ $line =~ ^[[:blank:]]*location ]] then local val=${line#*=} # remove leading whitespace characters val=${val#${val%%[![:space:]]*}} # remove trailing whitespace characters val=${val%${val##*[![:space:]]}} repos_location[$sec]=$val fi done <<< "$(cat $repos_conf)" } get_list(){ local path=$1 local next if [[ -e $path/parent ]] then while IFS= read -r line do if [[ $line =~ ^[a-z0-9]+: ]] then next=$(realpath ${repos_location[${line%%:*}]}/profiles/${line#*:}) elif [[ ${line:0:1} == / ]] then next=$(realpath $line) else next=$(realpath $path/$line) fi get_list $next echo $next done < $1/parent fi } import_repos_conf get_list $(realpath /etc/portage/make.profile) } ini_list_files(){ local path for path in $(ini_repo_dirs) \ /var/lib/calculate/calculate-update \ "$HOME/.calculate" \ /var/lib/calculate \ /etc/calculate \ /var/calculate \ /var/calculate/remote do if [[ -e $path/ini.env ]] then echo $path/ini.env fi done } # The function reads values from all ini.env files into the ini array get_ini(){ local line sec ini_file for ini_file in $(ini_list_files) do while IFS= read -r line do if [[ $line =~ ^[[:blank:]]*\[ ]] then line=${line#*[} line=${line%%]*} sec=$line continue fi if [[ $line =~ ^[[:blank:]]*[#\;] || $line == '' ]] then continue fi local var=${line%%=*} # remove leading whitespace characters var=${var#${var%%[![:space:]]*}} # remove trailing whitespace characters var=${var%${var##*[![:space:]]}} var=${sec}.${var} local val=${line#*=} # remove leading whitespace characters val=${val#${val%%[![:space:]]*}} # remove trailing whitespace characters val=${val%${val##*[![:space:]]}} ini[$var]=$val done < $ini_file done } get_ini