Kebanyakan shell menyediakan fungsi seperti &&
dan ;
untuk mengaitkan eksekusi perintah dengan cara tertentu. Tetapi bagaimana jika suatu perintah sudah berjalan, apakah saya masih dapat menambahkan perintah lain untuk dijalankan tergantung pada hasil dari yang pertama?
Katakan aku berlari
$ /bin/myprog
some output...
tapi aku sangat menginginkannya /bin/myprog && /usr/bin/mycleanup
. Saya tidak bisa membunuh myprog
dan memulai kembali semuanya karena terlalu banyak waktu akan hilang. Saya dapat Ctrl+ Zdan fg
/ bg
jika perlu. Apakah ini memungkinkan saya untuk mengikat perintah lain?
Saya sebagian besar tertarik pada bash, tetapi jawaban untuk semua shell umum dipersilahkan!
%
,%1
dan$!
. Penting untuk memasok PID atau perintah kedua akan selalu berjalan.wait
akan gagal memberikan hasil yang diinginkan. Adalah umum untuk menggunakan formulir pendek karena mereka kurang rentan terhadap kesalahan ketik.fg
kembali dengan kode keluar dari program yang dilanjutkannya. Karena itu Anda dapat menangguhkan program Anda dengan ^Zdan kemudian gunakanfg && ...
untuk melanjutkannya.sumber
myprog
untuk kedua kalinya menyebabkanfg
untuk mengakhiri dengan kode keluar 20 - yang tidak nol, sehinggamycleanup
perintah dirantai tidak dieksekusi.Tidak yakin apakah yang Anda minta itu mungkin, tetapi jika Anda masih memiliki shell tempat Anda memulai program, Anda selalu dapat memeriksa
$?
status keluar proses terakhir:sumber
wait
perintah di Bash.Jika pekerjaan di latar depan, salah satu dari perintah ini akan memiliki perilaku yang sama seperti yang Anda harapkan.
CATATAN: $? akan berisi status pengembalian program yang sedang berjalan saat keluar.
Ini secara eksplisit menyatakan apa yang akan dilakukan shell jika Anda awalnya memasukkan perintah.
Jika perintah pertama tidak dibaca dari
stdin
dan sedang berjalan di latar depan, perintah baru dapat dimasukkan saat perintah pertama sedang berjalan. Shell akan membaca dan menjalankannya ketika perintah pertama dijalankan. Jika perintah akan berjalan di latar belakang, tidak mungkin itu membacastdin
.EDIT: Menempatkan pekerjaan di latar belakang dan menggunakan
WAIT
perintah juga bisa digunakan. Ini harus dilakukan dengan hati-hati jika pekerjaan lain juga dijalankan di latar belakang. Spesifikasi pekerjaan diperlukan agarWAIT
perintah mengembalikan status pekerjaan yang ditunggu.sumber
wait
juga tidak ideal. Keuntungannya, IMO, adalah memberi kita API yang lebih jelas yang sedang kita hadapi. Mengetik lebih banyak perintah pada baris perintah setelah ada sesuatu yang berjalan terasa agak membingungkan bagi saya.wait
masih menderita karena tidak mendapatkan tautan langsung ke PID yang sedang berjalan, wrt status pengembalian. Ini tampaknya menjadi masalah lebih banyak w / bagaimana Bash mengimplementasikan sesuatu: stackoverflow.com/questions/356100/… . Jadi ini mungkin sama baiknya dengan yang didapat.