Identifique quando o comando curl terminou com sucesso

1

Eu tenho um script que, usando um comando curl para enviar uma solicitação para um serviço da web, a saída do serviço da web é gravada em um arquivo. O arquivo é então movido para outro local.

Em vez de usar um atraso no script (para aguardar a conclusão da gravação da saída em um arquivo), há alguma maneira de identificar se o comando curl foi concluído com êxito e a saída foi gravada em um arquivo?

Eu quero evitar um cenário quando estou movendo o arquivo enquanto as informações ainda estão sendo gravadas nele.

Aprecie sua opinião

    
por Borka 02.10.2017 / 06:28

2 respostas

2

Por que você estaria usando um atraso e por que precisaria mover o arquivo?

Basta escrever o arquivo no lugar correto para começar:

curl -o /path/to/correct/place/filename URL

Curl sai com um status de saída zero se terminar sem erro. Você pode usar esse fato para mover o arquivo para o local correto somente quando o Curl tiver êxito:

curl -o file URL && mv file /some/place

Ou, se você precisar fazer algum relatório de erros:

if curl -o file URL; then
    mv file /some/place
    # or, to use sftp:
    #      printf 'put file\n' | sftp -b - user@host 
else
    printf 'Curl failed with error code "%d" (check the manual)\n' "$?" >&2
    exit 1
fi
    
por 02.10.2017 / 07:42
0

Use o comando && para curl e mv . neste caso mv será executado somente se o comando anterior curl foi executado com sucesso.

curl .... >to_file && mv to_file /to/dest

Se você precisar mover o arquivo pelo servidor sftp, use o comando abaixo.

sftp USER@HOST:/path/in/remote/dest <<< $'put /path/to/local/to_file'

Ou até mesmo escreva diretamente no caminho do sftp remoto, o FILE curl irá gerar .

sftp USER@HOST:/path/in/remote/dest <<< $'put /path/to/local/"$(curl -o FILE URL)"'
    
por 02.10.2017 / 06:45

Tags