2016-07-13 3 views
1

私は、ユーザ入力からパラメータを受け取るスクリプトを持っていますが、環境変数からのパラメータを持つこともできます。環境変数でbashパラメータを累積し、それらを完全に解析する

: - :それはエラーを生成ように動作しないことを除いて

$*="${ADZ_DEPLOY_OPT} $*" 
while [[ $# -gt 1 ]] 
do 
    key="$1" 
    case $key in 
     --rootDir) 
     ADZ_ROOT_DIR="$2" 
     shift # past argument 
     ;; 
     --tagVersion) 
     ADZ_TAG_VERSION="$2" 
     shift # past argument 
     ;; 
     --from-git) 
     ADZ_DEPLOY_FROM_GIT=1 
     ;; 
     *) 
     # unknown option 
     ;; 
    esac 
    shift # past argument or value 
done 

輸出ADZ_DEPLOY_OPT =「--rootDir XXXXXXXのgit-から」

と私のスクリプトでは、私のような何かをしようと追加の値で展開するために$ *を更新しようとすると、この動作を達成する方法を見つけることができませんでした。

また、env変数は「デフォルト」として動作しますが、ユーザーがコマンドラインで明示的に指定したものによって上書きされる可能性があります。私の例では、ユーザーが別のrootDirを指定した場合、ユーザーrootDirを考慮してほしいです。

最後に、私は長いパラメータ名(私は明示的に好きです)を保ちたいので、getoptsの使用はオプションのようには見えません。

ご協力いただければ幸いです。

ありがとうございます。

+0

ステートメントが単純に「動作しません」という問題が発生した場合、解決策を提示することは困難です。 質問を編集して、 のどのようなことが起こるのか、実際の の結果とどのように違うのかをより詳しく説明してください。良いものを作るためのヒントについては、[ask]を参照してください。 –

答えて

0

$*="${ADZ_DEPLOY_OPT} $*" 

を交換:

set -- ${ADZ_DEPLOY_OPT} "[email protected]" 

注バッシュが設計されているよう

  • 、一方が$*に直接割り当てることができません。代入はsetビルトインで行われます。

  • "[email protected]"$*ではありません。フォーム$*は単語分割の対象となり、"[email protected]"の拡張子は適用されません。

  • ADZ_DEPLOY_OPTのサンプル値から、単語分割が必要です。 ADZ_DEPLOY_OPTに複雑な引数を入れようとすると、これは機能しません。代わりに配列を使う必要があります。

+1

私はあなたのソリューションをテストし、それは完全に動作します!ありがとう:) –

関連する問題