Expecto, Comando, Pipes e Gzip

1

Estou tentando trabalhar com o comando expect, tudo funciona bem até eu tentar enviar os resultados de um comando para um arquivo Gzip. Aqui está o trecho do arquivo bash:

XYZ=$(expect -c "
spawn python log-connector.py -s $strt -e $end -i 600 -a https://server:9000 -u someaccount -f ./conf/firewall-fields2.txt -q ./conf/query.txt -z | gzip >> /data/sources/results-$strt2-$end2.json.gz

expect \"Password:\"

send \"$pass\r\"

interact

")

echo "$XYZ"

$start - variável (data de início)
$end - variável (data final)
$strt2 - variável (data inicial com 00:00)
$end2 - variável (fim date with 23:59)
$pass - Senha digitada pelo usuário anteriormente.

Se eu remover

| gzip >> /data/sources/results-$strt2-$end2.json.gz

acima, funciona como esperado. Quando eu adiciono, recebo o seguinte erro:

send: spawn id exp7 not open
    while executing

usage: API [-h] [-s START] [-e END] [-d DAY] [-i INTERVAL]
                    [-a LOGGER] [-l LOGFILE] [-f FIELDS] [-q QUERY]
                    [-o OUTPUT] [-t FORMAT] [-u USER] [-p PASS] [-z]
API: error: unrecognized arguments: | gzip >> /data/sources/results-20180604-20180604.json.gz
    
por ximian 05.06.2018 / 20:51

1 resposta

2

Você pode querer usar um shell para interpretar o pipe e o redirecionamento: eu usarei um heredoc para facilitar a citação

XYZ=$(expect <<END_EXPECT
    set timeout -1
    spawn sh -c {python log-connector.py -s $strt -e $end -i 600 -a https://server:9000 -u someaccount -f ./conf/firewall-fields2.txt -q ./conf/query.txt -z | gzip >> /data/sources/results-$strt2-$end2.json.gz}
    expect "Password:"
    send "$pass\r"
    expect eof
END_EXPECT
)

echo "$XYZ"
    
por 05.06.2018 / 21:04

Tags