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");
Другие вопросы по тегам