【发布时间】:2019-11-10 02:47:01
【问题描述】:
我正在尝试运行连接到数据库的 shell 命令(当前为 sh 或 bash)。由于数据库仍在“预热”,因此命令失败。
所以我试图做一个循环(比如说...... 100 次尝试),每次命令失败时,等待 1 秒并重试。
如果有错误,这是转储到标准输出的字符串的开头:Sqlcmd: Error: <snipped>
这是我一直在尝试的:
for i in $(seq 1 100)
do
X='/opt/mssql-tools/bin/sqlcmd -E -S localhost -Q "<some sql statement> "'
if [[ $X == Sqlcmd: Error:* ]]
echo "."
then
break
fi
done
当我用 shell/bash 找出字符串比较的东西时,它不起作用……但更确定我是否走在正确的轨道上等等。
【问题讨论】:
-
使用
$()将输出放入 bash 变量中。查看我的编辑。 -
在@WernerHenze 之前,我从来没有做过这样的shell 脚本——所以我从来不知道命令、文件描述符、
2>&1和$?成语、stdout和@ 的状态码结果987654329@ 是两个不同的东西,等等。通过这个学习了很多 shell/bash shell 101。我从下面学到了足够的线索来找到答案。