【发布时间】:2019-03-08 18:00:34
【问题描述】:
我正在尝试根据 traceroute 是否从特定 IP 地址获得响应来执行代码。所以:
if traceroute 123.456.78.9
then
option 1
else
option 2
我的问题是,无论我是否从 IP 地址得到响应,选项 1 总是被执行。
我已经尝试使用 'ping' 而不是 traceroute 并且它有效,但我没有在最终代码中使用 ping 的选项。
更多详情:
- 在 QNX 操作系统上运行
- 成功由主机响应构成,失败由主机无响应构成
-
成功输出:
traceroute to 123.456.78.9 (123.456.78.9), 1 hops max, 40 byte packets 1 123.456.78.9 (123.456.78.9) 0.000 ms 1.000 ms 0.000 ms -
失败输出:
traceroute to 123.456.78.90 (123.456.78.90), 1 hops max, 40 byte packets 1 *
【问题讨论】:
-
运行
traceroute 123.456.78.9,然后echo $?检查退出状态。如果是0,则视为成功。如果是1,则视为失败。 -
如果 traceroute 在退出时总是报告成功,即使它无法到达远程系统,请向您的操作系统供应商提出 - 他们是为您提供 traceroute 的人;它不是 bash 的一部分。 OTOH,如果您想读取 traceroute 的标准输出并从那里确定成功或失败,我们可以这样做,但是您需要在您的问题中提供 much 更多信息(特别是成功的示例输出和失败案例,以及您期望构成失败的详细信息)。如果没有这些详细信息,答案可能只能在回答者运行的操作系统上运行。
-
感谢您的回复。我根据您的评论添加了更多详细信息。另外,我不确定如何使用上面提到的 echo $ 检查退出状态。
-
echo $?。?是其中的一部分。比较true; echo $?和false; echo $?。您会看到前者为 0(退出状态,if和其他条件将视为成功),后者为 1(与任何其他非零值一样,被视为失败)。
标签: linux networking ip-address qnx traceroute