【问题标题】:ping check in perl command doesn't workperl 命令中的 ping 检查不起作用
【发布时间】:2014-08-23 21:36:00
【问题描述】:

假设我 ping 一个已关闭或因任何原因无法访问的任意主机。

如果我在终端中这样做

ping -c 2 DOWNED_HOST_NAME_HERE

我会得到:

ping: unknown host DOWNED_HOST_NAME_HERE 

但是,这行代码不会导致脚本在我需要时死掉。

my $ping_check = `ping -c 2 $host`;


if ($ping_check =~ /ping: unknown host $host/){

    die("Error: Cannot currently access host.");

}

我不能为这个脚本使用 Net::Ping,我必须使用基本的 perl。这不会导致脚本出错吗?我注意到当我警告 $ping_check 时,它输出了一个空字符串。

【问题讨论】:

  • 也许您的问题应该是“如何在有这些限制的情况下使用 Net::Ping?”。 Net::Ping 是 Perl 5 中的核心模块,你没有理由不能使用它。

标签: perl ping die


【解决方案1】:

试试这个:

my $ping_check = `ping -c 2 $host 2>&1`;

错误消息正在打印到 stderr。您的命令的结果是标准输出。 2>&1 结合 stderr 2 和 stdout 1

不过,我总是使用Net::Ping。它为您提供了更多的控制权并且更便携。

【讨论】:

  • 特别是因为Net::Ping 是核心的一部分。
  • 那行得通。谢谢。而且我没有意识到 Net::Ping 是 Core 的端口。如果脚本移到那里,我认为它必须安装在另一台机器上..
  • @user1768884 在命令提示符下尝试corelist Net::Ping。这是一个方便的命令。
猜你喜欢
  • 1970-01-01
  • 2014-09-30
  • 1970-01-01
  • 2019-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-21
  • 2022-01-25
相关资源
最近更新 更多