Fornecendo descritores adicionais para o chamador do script

1

Meu script faz muitas chamadas remotas e avança o progresso de uma longa operação na tela para STDOUT. Eu atualmente escondo todos STDOUT e STDERR de minhas chamadas remotas porque eu não quero que eles manchem meu STDOUT e STDERR.

Como se permitiria o registro ou redirecionamento de STDOUT e STDERR das chamadas remotas usando "ssh" para estar disponível para quem estiver chamando meu script. Já ouvi falar de descritores de arquivos, mas não consigo entender como implementá-los.

Eu vi muitas postagens em descritores de arquivos, mas nunca na ótica de fornecer ou redirecionar a saída assim, então estou um pouco perdido!

Editar # 1

Então eu tenho esse código agora para executar chamadas remotas com base em uma variável definida anteriormente. Se eu fizer o seguinte:

remoteCall() {

    (
        command exec 1>&3
        command exec 2>&4
        ${remoteCommand} $@
    ) &> /dev/null

}

Ele deve ocultar a saída e o erro dessa chamada remota, a menos que eu redirecione de 3/4 para 1/2. Portanto, se alguém chamar meu script no esquema geral de thins (muito maior que este exemplo), nunca devemos ver nada na saída para a tela, exceto o que eu faço para STDOUT ou STDERR.

Se eu quisesse usar o STDOUT do remoteCall, como neste exemplo:

result=$(remoteCall "sudo lvs -o LV_NAME "${1}" --noheadings | wc -l")

Eu teria que fazer isso dessa maneira?

result=$(remoteCall "sudo lvs -o LV_NAME "${1}" --noheadings | wc -l" 3>1)

Então esse resultado contém o número de linhas?

    
por Mathieu Dumoulin 24.07.2017 / 18:50

1 resposta

2

Se você fizer no seu script:

ssh host cmd >&3 2>&4

Então quem chama seu script pode fazer:

your-script > output 2> error 3> remote-output 4> remote-error

No entanto, se eles não redirecionarem os fds 3 ou 4, o redirecionamento >&3 causará um erro fatal 3: Bad file descriptor .

Você pode usar como padrão redirecioná-los para / dev / null nesse caso com algo como:

(
   command exec >&3
   command exec 2>&4
   exec ssh host cmd...
) > /dev/null 2>&1

A execução do exec especial incorporado em command cancela o efeito especial que sai da sub-shell após um redirecionamento mal-sucedido. Os erros para esses redirecionamentos falhos são convenientemente descartados pelo > /dev/null 2>&1 externo.

    
por 24.07.2017 / 19:51