Anda dapat memisahkan beberapa perintah ;
, sehingga dijalankan secara berurutan, misalnya:
really_long_script.sh ; echo Finished
Jika Anda ingin menjalankan program berikutnya hanya jika skrip selesai dengan kode-kembali 0 (yang biasanya berarti telah dijalankan dengan benar), maka:
really_long_script.sh && echo OK
Jika Anda menginginkan yang sebaliknya (yaitu hanya melanjutkan jika perintah saat ini gagal), daripada:
really_long_script.sh || echo FAILED
Anda bisa menjalankan skrip Anda di latar belakang (tapi waspadalah, skrip keluaran ( stdout
dan stderr
) akan terus pergi ke terminal Anda kecuali Anda mengarahkannya ke suatu tempat), dan kemudian wait
untuk itu:
really_long_script.sh &
dosomethingelse
wait; echo Finished
Jika Anda sudah menjalankan skrip, Anda dapat menangguhkannya dengan Ctrl-Z
, dan kemudian jalankan sesuatu seperti:
fg ; echo Finished
Di mana fg
membawa proses yang ditangguhkan ke latar depan ( bg
akan membuatnya berjalan di latar belakang, seperti memulai dengan &
)
fg
mengembalikan nilai pekerjaan yang diteruskannya, Anda dapat menggunakanfg && echo Finished
jika Anda ingin memastikan perintah berhasil sebelum menjalankan perintah lainnya.Anda juga dapat menggunakan kontrol pekerjaan bash. Jika Anda mulai
lalu tekan ctrl + z untuk menangguhkannya:
untuk memulai kembali pekerjaan di latar belakang (seolah-olah memulai dengan
really_long_script.sh &
). Maka Anda bisa menunggu pekerjaan latar belakang ini dengandi mana N adalah ID pekerjaan (mungkin 1 jika Anda tidak menjalankan pekerjaan latar belakang lainnya) yang juga ditampilkan seperti di
[1]
atas.sumber
Jika proses tidak berjalan pada tty saat ini, maka coba ini:
sumber
watch
. Jawaban super singkat dan seseorang belajar cara baru yang bermanfaat untuk menggunakan arlojiTernyata ini tidak terlalu sulit: Anda cukup mengetik perintah berikutnya ke dalam jendela saat yang sudah ada berjalan, tekan enter, dan ketika yang pertama selesai, perintah kedua akan berjalan secara otomatis.
Saya menduga ada cara yang lebih elegan, tetapi ini tampaknya berhasil.
Mengedit untuk menambahkan bahwa jika Anda ingin menjalankan peringatan setelah perintah selesai, Anda dapat membuat alias ini di .bashrc, kemudian jalankan
alert
saat sedang berjalan:sumber
Beberapa waktu yang lalu saya telah menulis naskah untuk menunggu akhir dari proses lain.
NOISE_CMD
bisa jadi sesuatu sepertinotify-send ...
, mengingat yangDISPLAY
diatur dengan benar.Tanpa argumentasi apa pun, buat keributan segera. Perilaku ini memungkinkan sesuatu seperti ini untuk kenyamanan (katakan Anda memanggil skrip di bawah
alarm.sh
):Tentu saja Anda dapat melakukan banyak hal lucu dengan skrip seperti itu, seperti membiarkan instance
alarm.sh
menunggu instancealarm.sh
, yaitu menunggu beberapa perintah lain. Atau menjalankan perintah tepat setelah beberapa tugas pengguna login lain selesai ...>: DVersi sebelumnya dari skrip di atas mungkin menarik, jika Anda ingin menghindari ketergantungan
pgrep
dan menerima sendiri proses pencarian ID:Sedikit di luar topik, tetapi berguna dalam situasi yang serupa: Orang mungkin tertarik
reptyr
, alat yang "mencuri" proses dari beberapa shell (induk) dan menjalankannya dari shell saat ini. Saya telah mencoba implementasi serupa danreptyr
merupakan yang tercantik dan paling dapat diandalkan untuk keperluan saya.sumber