Aşağıdaki boruya sahip olduğumu varsayın:
a | b | c | d
Nasıl tamamlanması için bekleyebilir c
(veya b
) 'de sh
ya bash
? Senaryo olduğunu bu araçlar d
her zaman başlayabilir (ve yok değil bekledi gerekir) ama komple çıkışı gerektirir c
düzgün çalışması için.
Kullanım durumu olduğu difftool
için git
bu görüntüleri karşılaştırır. Tarafından çağrılır git
ve girdisini ( a | b | c
parça) işlemek ve karşılaştırmanın sonuçlarını ( d
parça) görüntülemek gerekir. Arayan a
ve için gereken girdiyi siler b
. Bu, komut dosyasından dönmeden önce işlemin c
(veya b
) sonlandırılması gerektiği anlamına gelir . Öte yandan, bekleyemiyorum d
çünkü bu, kullanıcı girdisini beklediğim anlamına geliyor.
Sonuçlarını c
geçici bir dosyaya yazabileceğimi veya belki bir FIFO kullanabileceğimi biliyorum bash
. (Ancak FIFO'nun yardımcı olup olmayacağından emin değilim.) Bunu geçici dosyalar olmadan başarmak mümkün mü sh
?
DÜZENLE
Belki de c
(veya b
) sürecin süreç kimliğini güvenilir bir şekilde bulabilmem yeterli olacaktır . Sonra tüm boru asenkron olarak başlatılabilir ve bir işlem kimliği bekleyebilirim. Çizgisinde bir şey
wait $(a | b | { c & [print PID of c] ; } | d)
DÜZENLEME ^ 2
Bir çözüm buldum, yorumlar (veya daha iyi çözümler) bekliyoruz.
d
istediği zaman başlamak ücretsizdir, ancak devam c
etmeden önce bitirmem gerekiyor.
d
zaman başlayabilirse, tam olarak ne bekliyorsunuz?
d
kullanmazsa , boru hattının bir parçasını c
yapmak mantıklı görünmüyor d
. Ancak d
girdiyi kullanıyorsa, d
yaklaşımınızın herhangi bir fark yaratması için hepsini okuduktan sonra girdisinde bir süre çalışmalıdır.
d
mı başlatmak istiyorsunuz ? Her çıkış hattını geldiği gibi işlemeye başlamak istemiyor musunuz?c
c
d