为什么这行直到循环表现不正常?

问题描述 投票:0回答:1

我有一个单行shell脚本,在该脚本中,我尝试持续连接到我的Redis服务器,直到建立连接为止(成功时输出“ OK”)。但是,我一定做错了,因为脚本似乎没有执行任何操作。

bash-5.0# sh -c "until [ $response=="OK" ]; do response="$((printf "AUTH <redis pw>\r\n") | nc -w5 <redis IP> <redis port>)"; echo $response; done;"
bash-5.0#

我在做什么错?

bash shell redis sh netcat
1个回答
0
投票

首先,请不要假设shbash相同。在大多数地方它们不是,甚至当以bash调用时,甚至sh的行为也会有所不同。

此刻,您的until条件始终求值为true,因为该表达式仅被视为非空字符串。演示:

$ [ ==OK ] && echo yo
yo

[请记住,[/bin/test的别名。您可以使用man test作为文档,但简单的答案是,使用单个等号,并在所有内容之间使用空格。哦,引用variables,而不是无特殊字符的常量。

也许是这样:

# bash -c "until [[ "$response" = OK ]]; do response="$(nc -w5 <redis IP> <redis port> <<<$'AUTH <redis pw>\r\n')"; echo "$response"; done"
© www.soinside.com 2019 - 2024. All rights reserved.