Как я могу пропинговать хост с однострочным Perl с Net :: Ping? - PullRequest
5 голосов
/ 18 октября 2010

Попытка интегрировать следующий однострочный Perl в скрипт оболочки. Этот код работает внутри скрипта Perl, но не как однострочный, выполняемый из скрипта оболочки.

Я попытался заменить $host реальным именем хоста, но безуспешно.

#!/bin/ksh

hosts="host1 host2 host3"

PERL=/usr/bin/perl

# Check to see if hosts are accessible.
for host in $hosts
do
   #echo $host
   $PERL -e 'use Net::Ping; $timeout=5; $p=Net::Ping->new("icmp", $timeout) or die bye ; print "$host is alive \n" if $p->ping($host); $p->close;'
done

Ответы [ 3 ]

9 голосов
/ 18 октября 2010

Одиночные кавычки в оболочке мешают интерпретации $ host. Таким образом, вы можете просто остановить и перезапустить одинарные кавычки при необходимости:

perl -MNet::Ping -e 'if (Net::Ping->new("icmp", 5)->ping("'$host'")) {print "'$host' is alive\n"}'

В качестве альтернативы вы можете передать хост в качестве параметра - см. Другой ответ.

1 голос
/ 18 октября 2010

Попробуйте заменить $host:

$PERL -e 'use Net::Ping; $timeout=5; $p=Net::Ping->new("icmp", $timeout) or die bye ; print "$host is alive \n" if $p->ping($host); $p->close;' 

с $ARGV[0], первый аргумент командной строки:

$PERL -e 'use Net::Ping; $timeout=5; $p=Net::Ping->new("icmp", $timeout) or die bye ; print "$ARGV[0] is alive \n" if $p->ping($ARGV[0]); $p->close;' $host
0 голосов
/ 18 октября 2010

Если вы хотите использовать Perl, используйте интерпретатор Perl для запуска вашего скрипта.

#!/usr/bin/env perl -w
use Net::Ping;
$timeout=5;
$p=Net::Ping->new("icmp", $timeout) or die bye ;
@hosts=qw/localhost 10.10.10.10/;
foreach my $host (@hosts) {
  print "$host is alive \n" if $p->ping($host);
}
$p->close;

В противном случае, вы также можете использовать команду ping непосредственно из оболочки

#!/bin/bash
for hosts in host1 host2 host3
do
  if ping  ...... "$hosts"  >/dev/null  ;then
      .....
  fi 
done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...