Açılışta durmadan bir ahududu pi üzerinde başlangıçta sonsuz bir döngü programı çalıştırma


0

Bir kabuk betiğim var:

#!/bin/bash
while sudo /home/pi/MyCode; do :; done
echo Error with MyCode

program sonsuz bir döngüde çalışır. Kabuk betiğini başlangıçta çalışacak şekilde ayarlamak (diğer bash betiği ile yaptım). Ancak, komut dosyasının başlangıcını durdurmasını ya da ssh yazmamı engellemesini istemiyorum.

Başlangıçta sonsuz döngüler nedeniyle SD kartlarını silmek ve yeniden bağlamak zorunda olan birçok insan gördüm. Bunu nasıl önleyebilirim?

Kodu arttırmayı denedim:

#!/bin/bash
while sudo /home/pi/MyCode &; do :; done
echo Error with MyCode

arka planda MyCode çalıştırmak için, ancak satır boyunca bir hata alıyorum

daha önce beklenmeyen bir karakter;

Başlangıcımı durdurmadan bu komut dosyasını başlangıçta çalıştırmanın bir yolu var mı? Eğer öyleyse, yine de SSH' yapma ve senaryoyu durdurma seçeneğim olacak şekilde yapılabilir mi?


I'm not sure i understand the question. I don't have a ' before the #!. #!/bin/bash is the fist line of my bash script.
JRogerC

I made a type. I meant a /, which appears to be gone now anyway.
lzam

Yanıtlar:


0

Remove the : It generates the syntax error. Alternatively insert a sleep 1 or something similar instead of it, bash can freak out on empty while ... do loops. If you go with this approach you shoukd also lose the & If you leave it in you will create a new process for every iteration of the loop, grinding your pi to a halt once all your ram is taken.

Also use ./myCode.sh or exec myCode.sh to be shure it actually runs the script.

If you are running raspbian i would also suggest using upstart. This allows for a more controlled way of triggering stuff during boot, like only run once the filesystem is available.

Maybe post the code you want to run also, i can check if there are no other errors. Good for my bash-fu training :-)


I had this code running for 36 hours straight without error, so I don't think the : is giving me any problems. However, the code is driving an external piece of hardware, and giving it a second of rest would not be a bad thing.
JRogerC

0

Put the loop in its own script, running in the background:

startup script:

#!/bin/bash
mainloop.sh &
echo Should get here

mainloop.sh:

#!/bin/bash
while sudo /home/pi/MyCode; do :; done

There's probably a way to do this in one script, I'm not familiar enough with Bash to do it though.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.