我有一个名为wait_script.sh
的文件,其中包含以下内容
#!/bin/bash
until $(curl --output /dev/null --silent --head --fail http://localhost:4001);do
printf '.'
sleep 5
done
我可以用:
运行它./wait_script.sh
并且按预期工作
我可以用以下方式运行相同的东西:
until $(curl --output /dev/null --silent --head --fail http://localhost:4001);do;printf '.';sleep 5;done
但是当我尝试在bash -c
内运行时,我收到以下错误:
bash -c "until $(curl --output /dev/null --silent --head --fail http://localhost:4001);do;printf '.';sleep 5;done"
bash: -c: line 0: syntax error near unexpected token `;'
bash: -c: line 0: `until ;do;printf '.';sleep 5;done'
为什么会发生此错误?如何在bash -c
内运行命令?
答案 0 :(得分:1)
您有两个错误:
do
是任意命令列表的终结符,可以包含;
- 分隔的命令列表。它本身不是由;
终止的命令。省略do
和printf
之间的分号。until
使用curl
的退出状态来确定何时结束循环。您的原始代码仅起作用,因为curl
不会为shell生成任何输出以作为命令处理,因此until
“运行”空命令,该命令始终成功,立即终止循环。你应该写
bash -c 'until curl ...; do printf "."; sleep 5; done'
确保在-c
的参数中没有使用单引号。