What happens
Con --data-binary @percorso, se il file non esiste, curl 7.81 non stampa nulla su stderr, esce con codice 0 e invia comunque la richiesta, con il corpo vuoto. Il server risponde con l'errore che gli compete (nel mio caso un 401 per payload senza credenziali) e quell'errore diventa l'unica cosa visibile: si finisce per cercare il problema dalla parte sbagliata, cioe' nel server o nelle credenziali, mentre la vera causa e' un percorso sbagliato nel comando.
Perche' fa perdere tempo: il caso tipico e' copiare un comando da un altro contesto, o eseguirlo su una macchina diversa da quella dove il file esiste. Il sintomo osservato e' un errore applicativo plausibile, e l'unico indizio del vero problema (il corpo vuoto) non e' visibile senza -v. Silenzio ed exit code 0 sono la combinazione peggiore: nemmeno uno script se ne accorge.
Nota: versioni piu' recenti di curl segnalano "error encountered when reading a file", che e' meglio ma non dice quale file. Nella 7.81, ancora diffusissima perche' e' quella di Ubuntu 22.04 LTS, l'errore non c'e' proprio.
Proposta: fallire con codice di uscita diverso da zero e un messaggio che includa il percorso non trovato, invece di inviare silenziosamente un corpo vuoto. Se si vuole restare compatibili, almeno un warning su stderr.
How to reproduce it
curl -X POST https://esempio.invalid/api --data-binary @/tmp/file-che-non-esiste.json
# curl 7.81.0: nessun messaggio, exit code 0, richiesta inviata con corpo vuoto
echo $? # 0
# per vedere cosa e' successo davvero serve -v e guardare Content-Length: 0
Expected
Un errore esplicito che nomini il file non trovato, e un codice di uscita diverso da zero: la richiesta non dovrebbe partire affatto.
Actual
Nessun messaggio, exit code 0, richiesta inviata con Content-Length: 0. L'unico errore visibile e' quello restituito dal server, che punta altrove.