为什么此脚本在Mac OS上而不在使用Git Bash的Windows上有效?

时间:2019-04-08 21:25:28

标签: bash

我写了一个站点诊断脚本,并一直在MacOS上使用iTerm2对其进行测试。可能会使用此脚本的人中有很大一部分使用Windows和Git Bash(与Windows和Mac OS相比可能是50 | 50):因此,不支持Windows可能不是一种选择。

我在这里有人在他们的Windows PC上测试该脚本,但该脚本立即失败。有谁知道为什么此功能在Mac上成功而在Windows上失败?

_ping_test(){

  # Define Error Codes & Messages Below:
  local _success="0"
  local _success_message="${_green}SUCCESS:${_reset_color} Ping Test Passed"
  local _unknown_host="68"
  local _unknown_host_message="${_red}ERROR:${_reset_color} Ping Test Failed on ${_url} - Unknown Host"
  local _unrecognized_code="${_red}ERROR:${_reset_color} Ping Test Failed - Unrecognized Status Code${_ping_test} "


  local _url="${1}.testdomain.net"
  local _ping_url=$(ping -c 1 -q $_url &> /dev/null; echo $?)

  if [ "${_ping_url}" == "${_success}" ] ; then
    echo $_success_message
  elif [ "${_ping_url}" == "${_unknown_host}" ] ; then
    echo $_unknown_host_message
    exit 1
  elif true ; then
    echo $_unrecognized_code
    exit 1
  fi
}

运行它会在他的计算机上返回“无法识别的代码”响应,但是鉴于同一站点在我的Mac上是成功的。

我回显了$ _url,这将返回正确的站点。我还尝试删除了&> /dev/null部分以回听问题所在,但是它返回它无法识别命令ping

然后,我直接在他的Git Bash窗口中直接运行ping命令,该命令在shell脚本之外起作用。

我意识到ping测试部分有点愚蠢(如果他们输入了错误的URL,则用来退出脚本),但是稍后运行的更有价值的ssh命令也同样失败

1 个答案:

答案 0 :(得分:3)

我设法抓住一台Windows PC和TiL,您传递给ping的参数遵循基于OS的不同范例:

-c表示在Mac OS上计数

但是

-c表示在需要管理员访问权限的Windows上进行分隔

修复参数,然后起作用