Я виконую деякі команди оболонки через скрипт perl і захоплюючи вихід, наприклад,
$commandOutput = `cat /path/to/file | grep "some text"`;
Я також перевіряю, чи команда виконана успішно чи ні,
if(!$commandOutput)
{
# command not run!
}
else
{
# further processing
}
Як правило, це працює, і я отримую вихід правильно. Проблема в тому, що в деяких випадках сама команда не виробляє жодного виводу. Наприклад, іноді текст, який я намагаюся grep
не буде присутній у цільовому файлі, тому результат не буде наданий. У цьому випадку мій скрипт виявляє це як "команда не запускається", тоді як його невірно.
Який правильний спосіб диференціювати ці два випадки в perl?
Відповіді:
5 за відповідь № 1Ви можете використовувати цю функцію, щоб дізнатися, чи не вдалося виконати команду, або команда нічого не повертає
$val = `cat text.txt | grep -o "[0-9]*"`;
print "command failed" if (!$?);
print "empty string" if(! length($val) );
print "val = $val";
припустимо, що text.txt містить "123ab", з якого потрібно отримати тільки номер.
1 для відповіді № 2
Використовуйте $?
перевірити, чи успішно виконана команда: див backticks не повертають жодного значення в perl для прикладу.
1 для відповіді № 3
Якщо ви не підключаєтеся |grep
Ви можете перевірити $?
для більш конкретного статусу виходу,
my $commandOutput = `grep "some text" /path/to/file`;
if ($? < 0)
{
# command not run!
}
elsif ($? >> 8 > 1)
{
# file not found
}
else
{
# further processing
}