Piping nulla su xargs


14

Ho una sceneggiatura che in alcune circostanze potrebbe non avere nulla su stdout. Alla fine dello script, passo le righe che ho ad un altro comando usando xargs. Il mio problema è che quando non c'è nulla su stdout, ricevo il tipico messaggio di errore "Uso: programma arg1 arg2".

Come posso evitarlo?


8
Sposta il tuo "MODIFICA" in una risposta e accetta la tua risposta. In questo modo le tue scoperte saranno utili per altre persone. meta.unix.stackexchange.com/questions/809/…
andcoz,

1
Non avevo abbastanza punti al momento. Lo farò ora.
Richard

Risposte:


13

Hai bisogno di un -ro --no-run-if-emptyopzioni.

Tieni presente che questo comportamento particolare è difficile da realizzare multipiattaforma. Le versioni BSD di xargsrun with -rper impostazione predefinita. Ne ha bisogno la versione GNU. La versione di FreeBSD di xargsignora il -rflag per la compatibilità con GNU. La versione di Mac OS X non accetta nemmeno il flag e genera un errore illegal option.

È quindi possibile scegliere di utilizzare un rilevamento del sistema operativo basato su $OSTYPEper scrivere uno script multipiattaforma. Ancora meglio, prova a rilevare il comportamento di xargsse stesso. Eseguilo con -re se fallisce (codice stato> 0), eseguilo senza -r.


3

Una lezione sul perché dovresti leggere le pagine man ...

Le bandiere -ro --no-run-if-emptysono mie amiche.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.