在成功的“直到循环”之后,Bash转换了我的ping命令

时间:2018-08-08 17:05:33

标签: bash

我正在尝试创建一个脚本,该脚本不断尝试对域进行ping操作,直到该域变为可用为止。我的目标是在超过所有重试次数后,成功时返回0,失败时返回1。

这是脚本:

#! /bin/bash

attempt_counter=0
max_attempts=20

until $(ping -c 1 "$1"); do
    if [ ${attempt_counter} -eq ${max_attempts} ];then
      echo "Max attempts reached"
      exit 1
    fi

    printf '.'
    attempt_counter=$(($attempt_counter+1))
    sleep 5
done

但是,只要ping成功,就不会出现退出 ,而是显示一个奇怪的错误:

/var/opt/openvpn/wait-on-ping.sh some.domain
ping: unknown host some.domain
.
ping: unknown host some.domain
.
######## AS THIS POINT DOMAIN IS REACHABLE ########
/var/opt/wait-on-ping.sh: line 6: PING: command not found

自从ping成功后以0退出后,我的直到条件是否写错了?

1 个答案:

答案 0 :(得分:2)

$(...anything...)扩展为命令...anything...输出。

因此,如果ping在其stdout上发出一个以单词PING开头的字符串,那么$(ping)将尝试运行PING -该输出-为命令。 (相反,var=$(ping)会将输出分配给变量,或者[ -n "$(ping)" ]将测试该输出是否为空)。


如果您不希望出现这种情况,请取出命令替换:您的代码应为:

 until ping -c 1 "$1"

...不涉及{​​{1}}。