Я делаю следующее:
#!/usr/bin/perl
use strict;
use warnings;
my $proc = `ps -ef|grep -c myscriptname`;
print $proc;
Это печатает 2, когда я запускаю его внутри скрипта.
ps -ef|grep -c myscriptname
в командной строке просто показывает: 1
Почему?
то же самое для my $proc = qx/ps -ef|grep -c myscriptname/
ОБНОВЛЕНИЕ
Чтобы было ясно, я запускаю этот фрагмент из somerandomscript.pl
Обновление 2
Следуя совету edorqui, я удаляю -c
, получая:
12013 15777 15776 0 14:11 pts/6 00:00:00 sh -c ps -ef | grep myscriptname
12013 15779 15777 0 14:11 pts/6 00:00:00 grep myscriptname Argument "12013 15777 15776 0 14:11 pts/6 00:00:00 sh -c ps..." isn't numeric in numeric gt (>) at somerandomscript.pl line 8
изнутри скрипта
myscript[n]ame
. Также я проверяю из другого скрипта. Пожалуйста, смотрите обновление в ОП. 09.08.2013grep myscriptname
(без -c) и распечатаете результаты? Какой из них отсутствует? 09.08.201312013 15777 15776 0 14:11 pts/6 00:00:00 sh -c ps -ef | grep myscriptname 12013 15779 15777 0 14:11 pts/6 00:00:00 grep myscriptname Argument "12013 15777 15776 0 14:11 pts/6 00:00:00 sh -c ps..." isn't numeric in numeric gt (>) at somerandomscript.pl line 8.
09.08.201312013 16965 15732 0 14:13 pts/6 00:00:00 grep myscriptname
09.08.2013grep -c
. 09.08.2013-c
из своего вызова grep, он изменил содержимое$proc
. Чего он не показал нам, так это того, что он делает что-то вродеif ($proc > 0) ...
в сценарии, а perl теперь жалуется, что$proc
не числовое. 09.08.2013ps
Cratylus обычно завершается до того, какgrep
даже войдет в таблицу процессов. 09.08.2013grep
без-c
. 09.08.2013if($proc > 0)
. 10.08.2013