Saída verbosa ausente ao executar um script como CGI

1

Este é o meu script de shell

#!/bin/bash
echo "Content-type: text/plain"
echo ""

sshpass -p $pass ssh -v -p $port -t -o StrictHostKeyChecking=no root@$ip "cd / && ls && exit"

Pode ser executado via web ou via linha de comando.

Quando executado via linha de comando, vejo muita saída ... incluindo informações de depuração de "-v" (modo detalhado), etc.

Mas quando executado via web, tudo que vejo é a listagem de pastas (saída do comando executado). Nenhum outro dado.

Por que os dados estendidos estão faltando quando eu executo este script via web? Por que está lá quando eu o executo via linha de comando?

Como posso ter certeza de que também está lá quando executado via web?

    
por Oou 23.06.2015 / 10:49

1 resposta

3

Seus "dados extras" estão sendo enviados pelo seu script para um erro padrão, não para uma saída padrão.

why is the extended data missing when i execute this script via web ?

Como a interface CGI usada entre o servidor seb e o seu script leva em consideração apenas o fluxo de saída do script, não o fluxo de erro padrão. O erro padrão está indo para outro lugar, possivelmente para o log de erros do servidor web, possivelmente em nenhum lugar.

why is it there when i execute it via command line ?

Como em um terminal, a saída padrão e o erro padrão passam, por padrão, para o mesmo local, que é o próprio terminal.

how can i make sure it is also there when executed via web ?

Você pode redirecionar o erro padrão para o mesmo local da saída padrão:

exec 2>&1

(descritor de arquivo 2 é erro padrão, descritor de arquivo 1 é saída padrão.)

    
por 23.06.2015 / 10:55

Tags