Leggi la risposta del corpo HTTP e ripeti il ​​risultato con Bash

Aug 31 2020

Sono piuttosto debole con bash quindi sii paziente con me.

Devo impostare uno script bash che faccia queste cose:

  • Avvia una richiesta di curl a un URL come:
curl  https://example.com/my_first_request

Questa richiesta restituisce una semplice risposta con un valore per riga come:

300
320
350
500

Devo leggere tutti questi valori e quindi eseguire una richiesta di arricciatura per ciascuna riga come questa:

curl  https://example.com/my_second_request/300
curl  https://example.com/my_second_request/320
curl  https://example.com/my_second_request/350
curl  https://example.com/my_second_request/500

Non mi interessa se quelle richieste sono asincrone o sincronizzate, questo script può richiedere tutto il tempo necessario.

Ho provato più volte con alcune risposte su stackoverflow e alcuni tutorial, ma ogni volta che fallisco. Qualcuno può aiutarmi con questo compito?

Grazie.

Risposte

2 1218985 Aug 31 2020 at 04:01

Puoi provare xargsanche con , che è in grado di eseguire un numero specificato di comandi in sottoprocessi. Un breve liner assomiglia a:

curl "https://example.com/my_first_request" | xargs -n1 -P2 -I % curl "https://example.com/my_second_request/%"

L'uso di -n1indica xargsper elaborare un singolo argomento di input alla volta. In questo caso, i codici di risposta ( 300, 320, 350, 500, ...) ottenuti dal primo endpoint vengono elaborati separatamente. E gli -P2indizi xargsper mantenere i 2sottoprocessi sempre in esecuzione, ognuno gestisce un singolo argomento, fino a quando tutti gli argomenti di input non vengono elaborati.

2 ColeTierney Aug 31 2020 at 00:19

Puoi usare la sostituzione del comando bash:

for code in $(curl https://example.com/my_first_request); do curl https://example.com/my_second_request/$code
done