Menurut halaman manual, xargs akan berhenti jika salah satu dari baris eksekusi keluar dengan kesalahan 255:
Jika ada pemanggilan perintah keluar dengan status 255, xargs akan segera berhenti tanpa membaca input lebih lanjut. Pesan kesalahan dikeluarkan pada stderr ketika ini terjadi.
Bagaimana saya bisa mendapatkan xargs untuk tidak melakukan ini?
Saya memiliki 1.500 pekerjaan batch yang ingin saya jalankan, 50 baris sekaligus. Saya menemukan bahwa itu selalu mati di jalur tertentu, dan tidak menyelesaikan pekerjaan. Tidak baik!
Pertanyaan yang lebih baik lagi, pertanyaan yang menggambarkan apa yang saya coba lakukan, adalah:
Bagaimana saya bisa menjalankan skrip batch 1500 baris, 50 baris sekaligus, sehingga tidak keluar dari pekerjaan di tengah, dan sehingga output ditangkap ke file log dari beberapa jenis?
sh -c
wors untukku!Anda bisa menulis permintaan xargs Anda untuk menutupi kode kembali dari baris perintah Anda. Dengan sesuatu seperti berikut ini,
xargs
tidak akan pernah melihat kode keluar kembali dengan somecommand :sumber
Baru saja menemukan jawaban yang menyenangkan untuk yang satu ini, meskipun kegunaannya akan tergantung pada perintah yang Anda coba jalankan.
Jika Anda menggunakan xargs pada dasarnya merakit daftar perintah, Anda bisa mendapatkan perilaku ini dengan mengatakan xargs untuk menggemakan perintah, kemudian memiping ke bash.
Misalnya, jika Anda mencoba menghapus daftar hal-hal yang mungkin ada atau tidak ada:
Ini berfungsi karena, pertama, xargs hanya memanggil echo, jadi ia tidak akan melihat kesalahan. Kemudian kedua, karena perilaku default bash untuk melanjutkan eksekusi setelah pernyataan yang gagal.
Untuk lebih spesifik tentang kasus saya, saya menggunakan ini untuk menghapus banyak versi aplikasi lama dari AWS ElasticBeanstalk seperti:
sumber
Pekerjaan konstruksi berikut untuk saya:
Bahkan jika peningkatan svn gagal pada beberapa elemen, proses dilanjutkan
sumber
Jika Anda menggunakan
xargs
denganfind
, gunakan-exec
opsifind
sebagai gantinya:sumber
xargs
bisa menjalankan perintah secara paralel. Keren. Jika Anda hanya ingin meminimalkan jumlah permintaan perintah,-exec
memiliki+
parameter.