derhal stdin'in her satırı için bir komut çalıştırma?


2

stdinHemen her satır için bir komutu nasıl uygularım ?

Örnek :

(echo abc; sleep 10; echo def;) | ???

xargsÇünkü aracı iş yapmaz bloklar tüm veriler görene kadar (bekler stdout'u kapatmak için). Yine de yeni hatlar kullanıma sunulduğunda komutları derhal yerine getirmem gerekiyor.



@Hennes Teşekkürler. Ne yazık ki olsa, yardımcı olmuyor. Sorun borunun içinde değil, nasıl xargsçalıştığını gösterir (tüm girişi görene kadar bekler / engeller).
VasyaNovikov

1
Yani, xargs kullanmayın. Bir borudaki tamponun çıktısını alın ve borunun diğer ucunda EOF'a kadar satırları okumak için bir kabuk betiği kullanın.
Hennes

@Hennes Bunu benim için yapacak bir komut satırı yardımcı programı arıyorum.
VasyaNovikov

1
@Hennes Yorumlarınızın arkasındaki fikri anlamak için örnek bir cevap yazdım.
VasyaNovikov

Yanıtlar:


2

GNU Paralelini Kullanma:

(echo abc; sleep 10; echo def;sleep 10; echo def;)|parallel -uj1

-u hemen çıktı almak için gereklidir. Komut olmadan çalışacak, ancak çıktı daha sonra basılacaktır.

-J1, tek bir iş yeri çalıştırmaya zorlar. Dışarıda bırakmak, GNU Parallel'in başlamadan önce n işlerini okumasını sağlar, burada n = çekirdek sayısıdır.


Whoa, hile yaptım! Denedim parallel -u echo, fakat dediğiniz gibi -j1, gerekliydi.
VasyaNovikov

1

@Hennes tarafından önerilen şekilde bir kabuk betiği kullanmak:

long_running_command | (
  while read -r LINE; do
    echo $LINE;
    command_to_execute "$LINE";
  done;
)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.