Memipiskan apa pun ke xargs

14

Saya memiliki skrip yang mungkin dalam beberapa keadaan tidak memiliki apa-apa di stdout. Di akhir skrip, saya meneruskan baris yang saya miliki ke perintah lain menggunakan xargs. Masalah saya adalah, ketika tidak ada apa-apa di stdout, saya mendapatkan pesan kesalahan "Penggunaan: program arg1 arg2" yang khas.

Bagaimana saya bisa menghindari ini?

Richard
sumber
8
Pindahkan "EDIT" Anda dalam jawaban dan terima jawaban Anda sendiri. Dengan cara ini penemuan Anda akan bermanfaat bagi orang lain. meta.unix.stackexchange.com/questions/809/…
andcoz
1
Tidak punya cukup poin saat itu. Akan melakukannya sekarang.
Richard

Jawaban:

13

Anda memerlukan -ratau --no-run-if-emptyopsi.

Perlu diingat bahwa perilaku khusus ini sulit dibuat lintas platform. Versi BSD xargsdijalankan dengan -rsecara default. Versi GNU membutuhkannya. Versi FreeBSD xargsmengabaikan -rflag untuk kompatibilitas dengan GNU. Versi Mac OS X bahkan tidak menerima flag dan melempar kesalahan illegal option.

Anda kemudian dapat memilih untuk menggunakan deteksi OS berdasarkan $OSTYPEuntuk menulis skrip lintas-platform. Bahkan lebih baik, cobalah untuk mendeteksi perilaku xargsitu sendiri. Jalankan dengan -rdan jika itu gagal (kode status> 0), jalankan tanpa -r.

Denis
sumber
3

Sebuah pelajaran tentang mengapa Anda harus membaca halaman manual ...

The -ratau --no-run-if-emptybendera adalah teman saya.

Richard
sumber