Eksekusi paralel Bash dan kode keluar
Saya ingin menjalankan beberapa perintah secara paralel dalam skrip bash, tetapi jika salah satu dari perintah ini gagal (mengembalikan kode keluar bukan nol), kode keluar skrip harus bukan nol.
Saya telah mencoba menggunakan sem
(https://www.gnu.org/software/parallel/sem.html):
cat >script.sh <<EOF
sem -j+0 "sleep 2; echo 1"
sem -j+0 "sleep 4; exit 1; echo 2"
sem -j+0 "sleep 6; echo 3"
sem --wait
EOF
bash script.sh; echo $?
dan hanya latar belakang prosesnya:
cat >script.sh <<EOF
{sleep 2; echo 1} &
{sleep 4; exit 1; echo 2} &
{sleep 6; echo 3} &
wait
EOF
bash script.sh; echo $?
Dalam kedua kasus tersebut, kode keluar keseluruhan selalu 0.
Ada ide?
Jawaban
2 KamilCuk
tetapi jika salah satu dari perintah ini gagal (mengembalikan kode keluar bukan nol), kode keluar skrip harus bukan nol.
Jadi tulislah kondisi itu.
childs=();
{ sleep 0.2; echo 1 ;} &
childs+=($!); { sleep 0.4; exit 1; echo 2; } & childs+=($!);
{ sleep 0.6; echo 3; } &
childs+=($!); ret=0; for i in "${childs[@]}"; do
if ! wait "$i"; then ret=1; fi done echo "ret=$ret"
exit "$ret"
2 yellowhat
Terima kasih semuanya atas jawaban mereka.
Berikut Mark Setchell
saran, saya pikir solusi terbaik bagi saya adalah:
#!/bin/bash
set -euo pipefail
cat <<EOF | parallel --halt 1
date; sleep 2; date; echo -e "1\n"
date; sleep 4; exit 1; date; echo -e "2\n"
date; sleep 6; date; echo -e "3\n"
EOF
Kiat Pemilik Anjing yang Bermanfaat: Mengapa Penting untuk Membiarkan Anjing Anda Mengendus di Jalan
Taylor Sheridan Baru Menambahkan 1 Bintang 'Yellowstone' Favoritnya ke Pemeran 'Lawmen: Bass Reeves'