首页 > 解决方案 > 传递命令以在函数中执行

问题描述

发送命令以在 bash 函数中运行返回错误的结果。我相信这是由于"但不确定。尝试用$*$@` $($1)$1` 替换。

#!/bin/bash

a(){

        status=unknown
        while [[ "$status" != "available" ]]; do
                aws rds describe-db-clusters --db-cluster-identifier=qa-cls  --query "DBClusters[0]|Status"

                $* > /tmp/aaa.out
                #status=`$1`
                #status=$($1)
                #$@ > /tmp/aaa.out
                echo "$1"
                echo "$status"
                cat /tmp/aaa.out
                sleep 10

        done

}
aws rds describe-db-clusters --db-cluster-identifier=qa-cls  --query "DBClusters[0]|Status"
a "aws rds describe-db-clusters --db-cluster-identifier=qa-cls  --query \"DBClusters[0]|Status\""

返回:

available
available
aws rds describe-db-clusters --db-cluster-identifier=qa-cls  --query "DBClusters[0]|Status"
unknown
None

标签: bashamazon-web-servicesshellaws-cli

解决方案


在您的函数中使用"$@"并从传递给的参数中删除引号a

a aws rds describe-db-clusters --db-cluster-identifier=qa-cls --query "DBClusters[0]|Status"

函数的参数是一个数组,它被正确地表示为"$@". 如果没有引号 ( $@or $*),您将得到奇怪的行为(分词)"$*"并将数组转换为单个字符串。

一些指示:


推荐阅读