Saya ingin menjalankan serangkaian perintah pipa yang melakukan banyak audioprocessing. Ini terlihat sebagai berikut dalam pseudocode:
command1 | command2 | command3
Dari command2 dan command3, keduanya mengambil output dari perintah sebelumnya sebagai input (perilaku stdin / stdout biasa).
Sekarang saya ingin menjalankan command1.1 lain setelah command1, yang sama sekali tidak terhubung ke pipa yang berjalan antara command1 dan command2, kecuali untuk itu tidak boleh dijalankan sebelum command1 selesai.
command1 [; after that run command1.1, even if command2 and command3 are still busy] command2 command3
Namun saya tidak tahu bagaimana melakukan ini di bash. Saya sudah mencoba tee, tetapi itu membuat perintah untuk dijalankan segera setelah pipa dibangun. Ada ide?
Terima kasih!
sumber
echo 'command1.1 >&2' >> myscript.sh
./myscript.sh
darimyscript.sh
; biasanya direktori saat ini tidak termasuk dalam jalur untuk alasan keamanan ...PATH
dan skrip yang, bahkan jika executable (chmod 755
) adalah dalam direktori saat ini, secara default mati dariPATH
.Konstruksi paling sederhana adalah:
Ada dua potensi masalah dengan ini. Jika
command1.1
menghasilkan keluaran apa pun di stdout, itu akan dikirim melalui pipa. Selaincommand2
itu tidak akan melihat EOF di stdin sampaicommand1.1
selesai.Jika pipa awalnya dipanggil dalam konteks di mana stdout dan deskriptor file stderr keduanya menunjuk ke file struct yang sama, maka ada cara sederhana untuk memperbaiki kedua masalah:
Ini akan menyebabkan stdout dari perintah1.1 mengarah ke stderr, yang tidak dialihkan oleh pipa.
Jika pada awalnya stdout dan stderr mungkin dua deskriptor file yang berbeda, pendekatan di atas dapat digunakan dengan menyembunyikan sementara stdout awal di nomor deskriptor file lain. Jadi kecuali Anda benar-benar harus menjaga stdout dan stderr
command1.1
terpisah, saya tidak akan mengambil pendekatan itu.Untuk kelengkapan, jika Anda ingin melakukannya, itu bisa terlihat seperti ini:
sumber