Saya dapat mengkonfirmasi bahwa untuk for i in *.txt; do echo "$i"; sleep 0.5 ; done(GNU bash, Versi 4.2.53)
Hauke Laging
Jawaban:
10
Ctrl-Zmenunda proses yang sedang berjalan. Dalam ekspresi
for i in ull-*.pbm;do convert "$i""tmp2/$i.pdf";done
semua perintah kecuali convert(mis for. in, dodan done) adalah bashkata kunci yang berjalan di shell saat ini dan shell tidak dapat menangguhkan dirinya sendiri (dan bagaimanapun juga bukan maksud Anda). Jadi ketika Anda menekan Ctrl-Z, dan perintah convertditangguhkan, loop hanya akan berhenti karena tidak ada yang diproses lagi.
Jika Anda ingin dapat menangguhkan seluruh loop maka jalankan saja di lingkungan subkulit:
(for i in ull-*.pbm;do convert "$i""tmp2/$i.pdf";done)
Satu-satunya shell yang saya tahu yang mampu menangguhkan seluruh loop di shell saat ini adalah zsh.
Tidak, Ctrl-Zhanya dapat menangguhkan instance satu konversi, tidak ada alasan mengapa loop tidak dapat melanjutkan dan memulai yang lain. Untuk beberapa alasan bashmenghentikan loop. Ketika saya menguji dalam dashloop terus, kerang lain mungkin melakukan hal yang sama.
Graeme
6
@Graeme melanjutkan loop dengan satu iterasi ditangguhkan tampaknya berbahaya bagi saya karena langkah selanjutnya dapat bergantung pada sebelumnya. Satu-satunya solusi yang masuk akal bagi saya adalah untuk menangguhkan seluruh loop dan itu bisa dilakukan secara subshell (sebenarnya zshdapat menunda seluruh loop berjalan di shell saat ini).
jimmij
3
Itu mungkin jawabannya - para bashpengembang kemungkinan memiliki pendapat yang sama dengan Anda. Melanjutkan pengulangan masih seperti yang saya perkirakan, ketika Anda menghentikan proses dan mengembalikan kontrol ke shell, tampaknya wajar jika ia mengambil dari tempatnya (dan mungkin akan menjadi perilaku bashjika mereka tidak menambahkan kode untuk melakukan sesuatu yang lain).
for i in *.txt; do echo "$i"; sleep 0.5 ; done
(GNU bash, Versi 4.2.53)Jawaban:
Ctrl-Z
menunda proses yang sedang berjalan. Dalam ekspresisemua perintah kecuali
convert
(misfor
.in
,do
dandone
) adalahbash
kata kunci yang berjalan di shell saat ini dan shell tidak dapat menangguhkan dirinya sendiri (dan bagaimanapun juga bukan maksud Anda). Jadi ketika Anda menekanCtrl-Z
, dan perintahconvert
ditangguhkan, loop hanya akan berhenti karena tidak ada yang diproses lagi.Jika Anda ingin dapat menangguhkan seluruh loop maka jalankan saja di lingkungan subkulit:
Satu-satunya shell yang saya tahu yang mampu menangguhkan seluruh loop di shell saat ini adalah
zsh
.sumber
Ctrl-Z
hanya dapat menangguhkan instance satu konversi, tidak ada alasan mengapa loop tidak dapat melanjutkan dan memulai yang lain. Untuk beberapa alasanbash
menghentikan loop. Ketika saya menguji dalamdash
loop terus, kerang lain mungkin melakukan hal yang sama.zsh
dapat menunda seluruh loop berjalan di shell saat ini).bash
pengembang kemungkinan memiliki pendapat yang sama dengan Anda. Melanjutkan pengulangan masih seperti yang saya perkirakan, ketika Anda menghentikan proses dan mengembalikan kontrol ke shell, tampaknya wajar jika ia mengambil dari tempatnya (dan mungkin akan menjadi perilakubash
jika mereka tidak menambahkan kode untuk melakukan sesuatu yang lain).