从bash中的case语句调用时,命令不执行

时间:2017-03-13 03:10:34

标签: bash shell variables

我陷入困境并试图解决为什么case语句中的命令不会在此bash脚本中执行的原因。

如果我将命令复制并粘贴到命令行并对其进行硬编码,它将起作用。 例: 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 个答案:

答案 0 :(得分:1)

未执行的命令位于函数cluster_to_endpoint内部,从未调用过。