2016-11-15 13 views
7

Я пытаюсь запустить команду Linux в Perl, используя обратные ссылки. Она работает, когда я запускаю его непосредственно в Linux, но когда Perl делает это через обратные кавычки, я получаю эту ошибку:Почему я получаю синтаксическую ошибку в backticks, хотя она работает в терминале?

sh: -c: line 0: syntax error near unexpected token `>' 
sh: -c: line 0: `(/src/storageUtil --diagnostic 2> >(tee >(cat >&2) >&1)) > log.txt' 

Строка кода в вопросе:

$output = `(/src/storageUtil --diagnostic 2> >(tee >(cat >&2) >&1)) > log.txt`; 

Любое понимание относительно того, что может вызвать эту ошибку.

Благодаря

+11

Возможно, вы проверили свой код в командной строке с помощью 'bash', но вы пытаетесь запустить его через' sh', когда вы вызываете его из Perl. –

+2

Вы абсолютный гений – user3307598

+2

Я бы предложил с файловыми переадресациями, вам было бы лучше «открыть» исполняемый файл для конвейера, а затем обработать файл io самостоятельно, а не аутсорсинг для оболочки. – Sobrique

ответ

10

Вы вероятно тестирование кода в командной строке с bash, но вы пытаетесь запустить его с помощью sh при вызове его из Perl.

Либо измените вашу команду на совместимость с оболочкой Bourne, либо явно вызовите bash.

+1

Спасибо :) ты спаситель – user3307598