Отсутствует вывод при запуске системной команды в файле perl / cgi - PullRequest
0 голосов
/ 31 марта 2010

Мне нужно написать CGI-программу, и она отобразит вывод системной команды:

script.sh

echo "++++++"  
VAR=$(expect -c " spawn ssh -o StrictHostKeyChecking=no $USER@$HOST $CMD match_max 
100000 expect \"*?assword:*\" send -- \"$PASS\r\" send -- \"\r\" expect eof ") 
echo $VAR 
echo "++++++"

В CGI-файле:

my $command= "ksh ../cgi-bin/script.sh";
my @output= `$command`; 
print @output;

Наконец, когда я запускаю файл CGI в Unix, $VAR - это очень длинная строка, включающая \ n и некоторые разделители. Однако когда я запускаю на веб-сервере, вывод

++++++

++++++

Так что $VAR отсутствует при переходе в веб-интерфейс / браузер. Я знаю, может быть, проблема в том, что $VAR очень длинная строка.

Но в любом случае, есть ли способ решить эту проблему, кроме записи выходных данных в файл и извлечения его из браузера?

Спасибо, если вас заинтересовал мой вопрос.

Ответы [ 2 ]

1 голос
/ 31 марта 2010

script.sh использует несколько переменных среды: $USER, $HOST, $CMD и $PASS. В среде CGI будут установлены переменные среды, отличные от оболочки входа в систему. Возможно, вам придется установить эти переменные из скрипта CGI перед вызовом script.sh.

0 голосов
/ 07 сентября 2017

Попробуйте найти в вашей системе такие команды, как ожидайте и ssh, которые вы вызываете, и добавьте их пути к каталогам в PATH, используемую вашим сценарием. * 1001 Т.е. *

which expect

возвращает / usr / bin / Ожидайте, затем добавьте строку:

PATH=$PATH:/usr/bin && export PATH

в начале сценария ksh. Во время отладки вы также можете перенаправить stderr в файл, добавив 2> /tmp/errors.txt в конец вашей команды, так как stderr не отображается в браузере.

my $command= "ksh ../cgi-bin/script.sh 2>/tmp/errors.txt";
...