Saya menulis skrip yang berisi until
lingkaran. Loop ini harus berjalan hingga variabel boolean disetel ke true
dari luar lingkaran. Sayangnya loop mengabaikan bahwa variabel telah disetel ke true dan terus berjalan. Berikut adalah beberapa baris yang menghasilkan masalah ini:
boolean=false
{ sleep 5 && boolean=true && echo "boolean is true now" ; } &
{ until [ "$boolean" = true ] ; do sleep 1 && echo $boolean ; done ; } &&
echo "boolean is true now: $boolean"
Output yang dihasilkan adalah:
false
false
false
false
boolean is true now
false
false
false
...
Bagaimana saya bisa membuat loop keluar ketika boolean
disetel ke true
?
Jawaban yang Diterima:
&
karakter membuat proses latar belakang. Proses latar belakang dijalankan secara asinkron dalam subkulit. Variabel dapat diteruskan dari shell induk ke sub shell, bukan sebaliknya. Namun, Anda dapat melakukan solusi jika Anda benar-benar membutuhkan nilai yang ditetapkan di shell anak:
boolean=$(mktemp) && echo "false" >$boolean
{ sleep 5 && echo true >$boolean && echo "boolean is true now" ; } &
{ until [ "$(cat $boolean)" = "true" ] ; do sleep 1 && cat $boolean ; done ; } &&
echo "boolean is true now: $(cat $boolean)"
Itu membuat file sementara yang isinya adalah nilai boolean. Dalam until
loop file itu diperiksa sampai berisi benar.
Pemberitahuan:
Saya sarankan untuk melakukan hal berikut dalam skrip Anda (jika mungkin):
{ sleep 5 && echo "background process done" ; } &
wait
echo "continue in foregound."
wait
menunggu proses latar belakang selesai.