Perl backticks при использовании труб
Я испытываю некоторые проблемы, пытаясь захватить вывод простой команды:
$timeTotal = `echo $timeTotal + $time | bc -l`;
Но я получаю следующие ошибки:
sh: +: not found
sh: Syntax error: "|" unexpected
Эта команда отлично работает в bash, но кажется, что sh на самом деле используется. В самом начале я думал, что проблема заключается в использовании канала (хотя сумма не очень хорошо интерпретируется). Меня смущает то, что следующая команда в том же скрипте не вызывает ошибок и работает правильно:
my $time = `cat $out.$step | bc -l`;
Какие-либо предложения?
2 ответа
Решение
$timeTotal
содержит завершающий символ новой строки, он не должен, так что вы выполняете
echo XXX
а также
+ YYY | bc -l
вместо
echo XXX + YYY | bc -l
Вы наверняка пропустите chomp
где-то.
В вашей команде также есть двойная кавычка, которая неуместна.
Бэктикс не рекомендуется. Использовать qx(..)
синтаксис вместо.
$timeTotal = qx(echo $timeTotal + $time | bc -l");