예상, 명령, 파이프 및 Gzip

예상, 명령, 파이프 및 Gzip

Expect 명령을 사용하려고 하는데 명령 결과를 Gzip 파일로 파이프하기 전까지는 모든 것이 잘 작동합니다. 다음은 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- 변수(시작일)
$end - 변수(종료일)
$strt2- 변수(시작일은 00:00)
$end2 - 변수(종료일은 23:59)
$pass- 사용자가 이전에 입력한 비밀번호입니다.

내가 삭제하면

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

위에서 보면 예상대로 작동합니다. 추가하면 다음과 같은 오류가 발생합니다.

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

답변1

파이프와 리디렉션을 해석하기 위해 쉘을 사용할 수도 있습니다. 인용을 더 쉽게 하기 위해 Heredoc을 사용하겠습니다.

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"

관련 정보