将命令放入 bash 会导致“没有这样的文件或目录”

将命令放入 bash 会导致“没有这样的文件或目录”

我正在针对我的 Cloud Foundry 实例运行一个命令来返回我的应用程序的运行状况。为了方便起见,我尝试为每个应用程序构建运行状况检查命令,如下所示:

cf apps | tail -n +5 | awk 'NF{print "\"curl -s http://" $6 "/cloudfoundryapplication/health | jq \\\".status\\\" && echo \\\"" $6 "\\\" \""}'

为每个应用程序生成类似这样的输出行

“curl -s”http://webapp.apps.example.com/cloudfoundryapplication/health | jq \“.status\” && echo \“webapp.example.com\” “

我可以通过执行以下操作一次运行该行:

bash -c "curl -s http://webapp.apps.example.com/cloudfoundryapplication/health | jq \".status\" && echo \"webapp.example.com\" "

接下来我想将所有命令并行传输并同时运行它们:

cf apps | tail -n +5 | awk 'NF{print "\"curl -s http://" $6 "/cloudfoundryapplication/health | jq \\\".status\\\" && echo \\\"" $6 "\\\" \""}' | parallel

但这就是我陷入困境的地方,每一行我都得到了这个:

/usr/bin/bash:curl -s http://webapp.apps.example.com/cloudfoundryapplication/health| jq ".status" && echo "webapp.apps.example.com" :没有这样的文件或目录

在网上搜索后,一些人遇到了与 shell 扩展类似的问题,但我不知道这与我的问题有什么关系。

答案1

答案是我在整个命令周围加上了额外的双引号。

以下是最终的工作命令:

cf apps | tail -n +5 | awk 'NF{print "curl -s http://" $6 "/cloudfoundryapplication/health | jq \".status\" && echo \"" $6 "\" "}' | parallel

相关内容