bash function para executar um comando como argumento

1

Estou escrevendo um script bash e tenho uma função que obtém 3 argumentos, um nome de host, um comando e um arquivo, deve excutar o comando nesse nome de host e redirecionar a saída para o nome do arquivo. Esta é a função:

execmd ()
    {
    P_SERV="$1"
    P_CMD="$2"
    P_OUT="$3"

    X_SERV='hostname'
    if [ "$P_SERV" = "$X_SERV" ] ; then
       $P_CMD >> $P_OUT
    else
       ssh $P_SERV $P_CMD >> $P_OUT
    fi
    }

Quando executo:

execmd venus "cat /proc/meminfo" /tmp/meminfo

Eu recebo o erro

cat /proc/meminfo: no such file or directory

alguma ideia porque não está funcionando? mesmo comportamento, seja chamando-o com nome de host local ou nome de host remoto.

    
por Marcelo 13.09.2016 / 21:30

1 resposta

0

O SSH executa um shell remoto. Para obter um comportamento consistente para execução local, execute um shell local.

if [ "$P_SERV" = "$X_SERV" ] ; then
   sh -c "$P_CMD" >> "$P_OUT"
else
   ssh "$P_SERV" "$P_CMD" >> "$P_OUT"
fi

Não esqueça de aspas duplas em torno das substituições . Por exemplo, sem aspas duplas, se P_CMD contiver curingas, elas seriam expandidas localmente em ssh $P_SERV $P_CMD .

    
por 14.09.2016 / 03:58