我正在针对我的 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