Embora seja possível transformar esse arquivo em um snippet de shell, é complicado. Você precisa ter certeza de que todos os caracteres especiais do shell estão corretamente citados.
A maneira mais fácil de fazer isso é coloque aspas simples ao redor do valor e substitua as aspas simples dentro do valor por '\''
. Você pode então colocar o resultado em um arquivo temporário e fornecer esse arquivo.
script=$(mktemp)
sed <"config-file" >"$script" \
-e '/^[A-Z_a-z][A-Z_a-z]*=/ !d' \
-e s/\'/\'\\\'\'/g \
-e s/=/=\'/ -e s/\$/\'/
Eu recomendo fazer a análise diretamente no shell. A complexidade do código é quase a mesma, mas existem dois grandes benefícios: você evita a necessidade de um arquivo temporário e o risco de ter acidentalmente errado as citações e acaba executando uma parte de uma linha como um fragmento de shell ( algo como dangerous='$(run me)'
). Você também tem uma chance melhor de validar possíveis erros.
while IFS= read -r line; do
line=${line%%#*} # strip comment (if any)
case $line in
*=*)
var=${line%%=*}
case $var in
*[!A-Z_a-z]*)
echo "Warning: invalid variable name $var ignored" >&2
continue;;
esac
if eval '[ -n "${'$var'+1}" ]'; then
echo "Warning: variable $var already set, redefinition ignored" >&2
continue
fi
line=${line#*=}
eval $var='"$line"'
esac
done <"config-file"