( sleep 300 ; echo "80" > /sys/class/leds/blue/brightness ) &
Dengan begitu skrip Anda berlanjut, atau Anda segera memulihkan kontrol, sementara tugas latar belakang skrip baru dimulai, dengan dua perintah: sleep, and echo.
Kesalahan umum adalah mencoba untuk memberikan baik sleep
atau echo
atau kedua &
yang tidak akan bekerja sebagaimana dimaksud. Meluncurkan serangkaian perintah ()
meskipun memunculkannya dalam proses shell terpisah, yang kemudian dapat Anda kirim bersama ke latar belakang &
.
Untuk kecerdasan itu, di mana saya menemukan itu secara aktif berguna. Di perangkat tertanam saya kembangkan ada aplikasi utama yang bekerja dengan anjing penjaga. Jika gagal dengan cara yang memicu pengawas reset segera setelah startup, berulang kali, sulit untuk memperbaiki jarak jauh karena periode antara OS dimulai dan reset cukup singkat, tidak cukup untuk ssh in, dan memblokir startup aplikasi. Jadi saya perlu cara untuk menentukan sistem restart begitu cepat dan memperkenalkan penundaan jika itu, untuk memberi saya waktu untuk memperbaikinya secara manual.
[ -f /tmp/startdelay ] && sleep 30
touch /tmp/startdelay
( sleep 30 ; rm /tmp/startdelay ) &
[ -f /tmp/noautostart ] && exit 0
start_app
Jika saya masuk dan melakukan touch /tmp/noautostart
aplikasi utama tidak akan mulai. Jika anjing penjaga menendang, rm /tmp/startdelay
tidak akan dilakukan dan waktu berikutnya sistem dimulai, itu akan memberi saya 30-an tambahan untuk menghentikannya. Kalau tidak, restart akan cepat, tanpa penundaan.
&
latar belakang tidur; "Anda juga perlu latar belakang tidur" berada di baris pertama dari awal. Jika Anda tidak mempercayai saya, lihat pada riwayat edit. Dan jawaban saya 5 menit lebih tua dari jawaban Anda: P()
grup, shell asli akan berhenti sampai yang melahirkan selesai.)gunakan
at
perintahyang akan berjalan di latar belakang
sumber
echo
semuanya dengan menggunakan heredoc atau herestring.at
adalah perintah POSIX standar. Sistem seperti Unix apa yang tidak tersedia secara default?Jika Anda ingin sesuatu berjalan dalam 5 menit, tetapi sisa program Anda untuk melanjutkan (atau menyelesaikan), Anda juga perlu latar belakang tidur:
Ini akan mencetak
hello
dan kemudian 3 detik kemudian (setelah program utama keluar), cetakworld
.Bagian yang penting adalah
&
melakukan fork eksekusi fungsi ke latar belakang.sumber
runWithDelay () { sleep $1; "${@:2}"; }
?doWhateverWithDelay 3 &
dalam contoh kedua Anda.$@
adalah Anda dapat mengutipnya dan akan diperluas sebagai daftar kata-kata yang dikutip. Jadi lebih baik membuatnya"$@"
(atau"${@}"
jika Anda suka kawat gigi). Lihat pastebin.com/MU7hbB2C-n
), tapi jelas itu agak naif.