2017-03-13 13 views
0

caseステートメント内のコマンドがこのbashスクリプト内で実行されない理由を突き止めようとしています。bashのcaseステートメントから呼び出されたときにコマンドが実行されない

コマンドラインにコマンドをコピーして貼り付け、値をハードコードすると機能します。 例:スクリプトで psql -h mycluster-1.us-east-1.redshift.amazonaws.com -U masteruser -d dev -p 5439 -v v1="foo_bar" -f getTableDetails.sql

、私は可能な空白問題については、括弧内のコマンドを包ま:

#!/usr/local/bin/bash 

    set -e 
    set -x 


    cluster_to_endpoint() { 
     case "$1" in 
     c01) 
      RUNCMD=$(psql -h mycluster-1.us-east-1.redshift.amazonaws.com -U masteruser -d dev -p 5439 -v v1="$NAME" -f getTableDetails.sql) 
      ;; 
     c02) 
      RUNCMD=$(psql -h mycluster-2.us-east-1.redshift.amazonaws.com -U masteruser -d dev -p 5439 -v v1="$NAME" -f getTableDetails.sql) 
      ;; 
     esac 
    } 


    while getopts ":c:n:" opt; do 
     case $opt in 
     c) cluster="$OPTARG";; 
     n) name="$OPTARG";; 
     *) usage 
      exit 1 
      ;; 
     esac 
    done 

私はそうのようなスクリプトを実行しています:./myscript.sh -c c01 -n foo_bar

私もちょうど試してみました()も削除してください:

c01) 
    psql -h mycluster-2.us-east-1.redshift.amazonaws.com -U masteruser -d dev -p 5439 -v v1="$NAME" -f getTableDetails.sql;; 

変数が設定されているようです。

$ ./myscript.sh -c c01 -n foo_bar 
+ getopts :c:n: opt 
+ case $opt in 
+ cluster=c01 
+ getopts :c:n: opt 
+ case $opt in 
+ name=foo_bar 
+ getopts :c:n: opt 

なぜコマンドが実行されていませんか?ありがとう。

答えて

1

実行されていないコマンドは、決して呼び出されない関数cluster_to_endpointの中にあります。

+0

はい、最後に追加するのを忘れました。それがそれでした。ありがとう! – noober

関連する問題