JQを使ってシェルスクリプトでJSONを読んでいます。ここでは、シェルスクリプトの変数$ HOME、$ HOST、$ PEMFILEをその場で解釈することができません。シェルスクリプト内で変数をその場で解釈するにはどうすればよいですか?
JSONファイル:
{
"script": {
"install": "${HOME}/lib/install.sh $HOST $PEMFILE",
"Setup": "${HOME}/lib/setup.sh $HOST $PEMFILE $VAR1 $VAR2"
}
}
シェルスクリプト:
#!/bin/bash
examplefile="../lib/example.json"
HOST=ec2-..-...-...-...us-west-2.compute.amazonaws.com
PEMFILE=${HOME}/test.pem
installScript=($(jq '.script.install' $examplefile))
bash "$installScript"
私はJSONを変更せずにその場でこれらの変数を解釈できる方法はありますか?
P.S私はevalを使用したくありません。ここ
それを置き換えるパラメータ置換、あなたはJSONを変更する必要があります。任意のコマンドを1つの文字列として格納することは悪い考えです。そのまま展開されるパラメータは正しく引用されません。 – chepner
また、 'bash -c'を使うか、' '$ installScript''を実行するスクリプトの名前として扱います。 – chepner
'installScript =($(jq '.script.install' $ examplefile))'はここでは奇妙な形です。文字列を文字列で配列に分割した後、 'bash 'に入れます$ installScript" youその配列の最初の要素のみを展開します。そして、文字列分割は一般的に手元にあるバグであり、[BashFAQ#50](http://mywiki.wooledge.org/BashFAQ/050)を参照してください。 –