Varolan bir bash komut dosyasını değiştiriyorum ve while döngüsünün doğru şekilde davranmasıyla ilgili bir sorun yaşıyorum. Bu benim Başarı durumunda 0 ve 1 döndürür executable1 aşağıdakiDöngü sırasında bir koşulda bileşik koşullu
while ! /usr/bin/executable1 && ! $(myfunc)
do
# executable1 and myfunc both were unsuccessful. So sleep for some time
sleep 2
done
bu değiştirmek istiyorum orijinal kod
while ! /usr/bin/executable1
do
# executable1 returned an error. So sleep for some time try again
sleep 2
done
olduğunu. yürütülebilir kadar döngü devam edecek özgün senaryo başarıyı Buna göre myfunc ben döngü yeni yapar benim ederken fark bu
myfunc()
{
# Check if file exists. If exits, return 0, If not, return 1
if [ -e someFile ]; then
return 0
fi
return 1
}
gibi kodlanmıştır
döndü neden bash 0 olarak değerlendirilir ben o "gerçek" anlamaları için şu çalıştırılabilir1 gibi görünmüyor. Her zaman myfunc() işlevini çağırır ve sonra hemen döngüden çıkar. Neyi yanlış yapıyorum?
ben while döngüsü kodlama çeşitli yollar denedik (ile (()), [], [[]] vs), ama hiçbir şey onu
'executable1' hiç çalışmaz değildir; 'myfunc' çalıştırılıp çalıştırılmayacağına (' && 'nedeniyle) karar vermek için * çalıştırılmalıdır. – chepner
yürütülebilir 1 kendisi tarafından çalıştırıldığında tamamlamak için 8-10 saniyeye yakın alır. (aslında "ntpdate" çalışır) Bu yüzden, hemen hemen geri döndüğünden emin olun, çünkü while döngüsü hemen geri döner. –
Sanırım problemi kodumda çözmüş olabilirim. Bash'te, true değeri 0'a döner ve false 1'e dönüşür. Yani ((0)) aslında sonsuz bir döngüdür. Ne yapmak istediğim, dosya bulunmazken while döngüsünü girmek. Dosya bulunamadığı zaman 1 (yanlış), dosya bulunduğunda ise 0 (doğru) dönmeliyim. Bu değişikliği yaptıktan sonra, hepsi bu sorudaki kodumun temel bilgileri olan –