Come verificare in modo efficiente se un comando arbitrario ha prodotto un output nella shell POSIX? (Diciamo git ls-files --killed
.)Come verificare se un output del comando non è vuoto nella shell POSIX?
Ci sono tre modi ovvi, ma ognuno sembra brutto o il male a me:
- [-n "$ (git LS-files --killed)"] - l'output completo del comando deve essere catturato nella memoria e passato a prova (che è almeno si spera, un built-in)
- [ "$ (git ls-files --killed | wc -c)" -gt 0] - due fork-exec coinvolti
- TMP = $ (tempfile); git ls-files --killed> "$ tempfile"; [-s "$ tempfile"] & & ...; rm "$ tempfile" - è richiesto un file temporaneo intermedio (anche in questo caso catturare tutto l'output)
git ls-files - restituzioni restituite riuscite indipendentemente dal numero di file trovati come ls. – matthewbauer
Grazie! Ovviamente, 'head -n 1' è esattamente ciò che mi mancava, perfetto. (Nota che non considero la tua prima risposta tanto rilevante quanto il ritorno/non ritorno dell'output è qualcosa di molto diverso dal successo/fallimento. Inoltre, considererei più elegante usare una versione più succinta 'se git ls- file --killed>/dev/null; then ...; fi'. –
(... anche se coinvolge anche due fork. Penso comunque che sia la migliore alternativa finora suggerita.) –