2016-03-28 13 views
0

コマンドラインオプションで環境変数を指定できるようにして、ユーザーに構成レイヤーを提供しようとしています。この設定は、実際には引数を受け取り、次に自分のプログラム(program.sh)を呼び出すラッパープログラム(run.sh)用です。環境変数をスクリプト引数に変換する

引用符を維持している引数に問題があり、予期しない引数が渡されています。ここで

は実装例です:

run.sh

exec `pwd`/program.sh ${CONFIG} "[email protected]" 

program.sh

for var in "[email protected]" 
do 
    echo "$var" 
done 

例の呼び出しは次のようになります。

$> CONFIG='--foo="bar baz quo" --foo2="bar2 baz2"' ./run.sh hello abc123  
--foo="bar 
baz 
quo" 
--foo2="bar2 
baz2" 
hello 
abc123 

は私が期待したような出力:私はqoutesでrun.shにラッピング$ {CONFIG}を試してみましたが、それはただ--foo="bar baz quo" --foo2="bar2 baz2"の単一の引数を作る

--foo="bar baz quo" 
--foo2="bar2 baz2" 
hello 
abc123 

CONFIG内の見積もりをエスケープすると、間違った結果になります。

+0

「abc123」はどこから来たのですか? – cdarke

+0

環境は、このような引数を渡す正しい方法ではありません。 – chepner

+0

@cdarke 'abc123'は間違った行に置かれ、それを反映する質問が更新されました。 – Lull3rSkat3r

答えて

0

run.sh

eval exec `pwd`/program.sh "${CONFIG}" "[email protected]" 

program.sh

for var      # The 'in "[email protected]"' is not required, it is the default 
do 
    echo "$var" 
done 

出力:あなたの出力のabc123がから来ることになっていることを確認

$ CONFIG='--foo="bar baz quo" --foo2="bar2 baz2"' ./run.sh hello 
--foo=bar baz quo 
--foo2=bar2 baz2 
hello 

注意。

+1

これは、 'CONFIG'変数が外部ユーザから来ているので危険です。一度 'CONFIG = '$(rm program.sh)を設定することができます。 --foo = "bar baz quo" --foo2 = "bar2 baz2" '' – anubhava