GNU/Linux >> Belajar Linux >  >> Linux

Loop Mengabaikan Perubahan Variabel Dari Subkulit Di Latar Belakang?

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.


Linux
  1. Bagaimana Cara Mengatur Variabel Sama Dengan Output Dari Perintah Di Grub2?

  2. Cara mengubah variabel PATH di Linux

  3. Baca nilai ke dalam variabel shell dari pipa

  1. Menghasilkan hash SHA-256 dari baris perintah Linux

  2. Dapatkan 4 karakter keluaran terakhir dari keluaran standar

  3. Bagaimana cara mengubah bahasa git saya?

  1. Bagaimana Mengubah Nama Variabel Bash Dalam Loop Dan Kemudian Memperluas Nama yang Diubah?

  2. Linux – Ubah Jumlah Partisi Dari Sda1 Ke Sda2?

  3. Bagaimana cara mengubah kursor Terminal dari kotak ke baris?