Bir programı X kere çalıştır

18

Terminalde bir programı X kez nasıl çalıştırırım?

Bir bin / bash txt yapmak zorunda olduğumu okudum, ama bu X kere nasıl çalıştırılacağını bilmiyorum.

    
sordu user3597989 12.09.2014 17:39

6 cevap

23

xargs ve seq . Genel olarak:

seq nr_of_times_to_repeat | xargs -Iz command

Örneğin:

seq 10 | xargs -Iz xdotool click 1

, xdotool click 1 komutunu 10 kez yürütür.

    
verilen cevap Radu Rădeanu 12.09.2014 18:41
11

Bir Terminal açın ve aşağıdaki bash komutunu kullanın:

for i in {1..5}; do xdotool click 1; done

Biraz ayrıntı ve 1s gecikme ile:

for i in {1..5}; do echo click \#$i && xdotool click 1 && sleep 1; done
click #1
click #2
click #3
click #4
click #5
    
verilen cevap Sylvain Pineau 12.09.2014 18:09
5

Bunu yapmalı:

#!/bin/bash

x=1
while [ $x -le 10 ]
do
  <command to run>
  x=$(( $x + 1 ))
done

Burada 10 komutu çalıştırmak için kaç kez

Biraz ara vermeniz gerekiyorsa:

#!/bin/bash

x=1
while [ $x -le 10 ]
do
  <command to run>
  sleep 1
  x=$(( $x + 1 ))
done

Komut dosyasını boş bir dosyaya kopyalayın, <command to run> 'yini xdotool komutunuzla değiştirin, run_xdotool.sh olarak kaydedin, komutla çalıştırın:

sh /path/to/run_xdotool.sh

Alternatif olarak, bunu yürütülebilir hale getirebilir ve sadece

ile çalıştırabilirsiniz.
/path/to/run_xdotool.sh

Başka bir çözüm: xdotool'un yerleşik yineleme seçeneğiyle

Tıklama yapmak için kullanacağınızdan bahsetmiş olduğunuzdan, en kolayı xdotool 'nin kendi dahili tekrarlama seçeneğini kullanmak olabilir. Biçim:

xdotool click --delay <delay> --repeat <repeats> <button>
(delay in milliseconds between the clicks)

Bir satırda 10 fare tıklaması yapmak (tuş 1), aralarında bir saniye, komut:

xdotool click --delay 1000 --repeat 10 1
    
verilen cevap Jacob Vlijm 12.09.2014 18:06
4

Bitiş noktalarını belirtmek için değişkenleri kullanabilmenin brace-genişletme sürümüne ( for ) göre avantajı olan bir C stili {1..5} döngüsü kullanabilirsiniz. Her iki sürüm de harici bir yardımcı program kullanmaktan daha iyidir ( seq ).

t=5
for ((x = 1; x <= t; x++))
do
    xdotool click 1
done

Hepsi bir satırda:

t=5; for ((x = 1; x <= t; x++)); do xdotool click 1; done

Ya da bir döngü olmadan bunu gerçekleştirebilirsiniz (bu özel yarar ve işlev için):

xdotool click --repeat 5 --delay 50 1
    
verilen cevap Dennis Williamson 12.09.2014 23:50
4

Eğer GNU Paralel'iniz varsa şunları çalıştırabilirsiniz:

seq 10 | parallel -N0 doit

Tüm yeni bilgisayarlarda birden çok çekirdek var, ancak çoğu program doğası gereği seridir ve bu nedenle birden çok çekirdek kullanmaz. Ancak, birçok görev son derece paraleldir:

  • Aynı programı birçok dosyada çalıştır
  • Bir dosyadaki her satır için aynı programı çalıştırın
  • Bir dosyadaki her bir blok için aynı programı çalıştırın

GNU Paralel, genel bir paralelleştiricidir ve aynı makinede veya ssh erişiminiz olan birden fazla makinede paralel olarak işleri kolayca çalıştırır.

Eğer 4 farklı işlemci üzerinde çalışmak istediğiniz 32 farklı işiniz varsa, paralel işlemek için düz bir yol, her CPU'da 8 iş çalıştırmaktır:

Bunun yerine GNU Paralel, bir işlemci bittiğinde yeni bir işlem oluşturur - CPU'ları aktif tutmak ve böylece zamandan tasarruf etmek:

Kurulum

Kişisel kurulum kök erişimi gerektirmez. Bunu yaparak 10 saniye içinde yapılabilir:

(wget -O - pi.dk/3 || curl pi.dk/3/ || fetch -o - http://pi.dk/3) | bash

Diğer yükleme seçenekleri için bkz. İşte

Daha fazla bilgi edinin

Daha fazla örneğe bakın: İşte

Tanıtım videolarını izleyin: İşte

Eğiticiyi gözden geçirin: İşte

Destek almak için e-posta listesine kaydolun: İşte

    
verilen cevap Ole Tange 13.09.2014 11:21
0

Sadece izleme komutunu kullanabilirsiniz:

watch -n x <your command>

saniye cinsinden süreye değiştirin.

Örnek:

watch -n 1 xdotool click 1 

Yani xdotool tıklayın 1 her 1 saniyede tekrarlanacak, bittiğinde sona erecektir.

    
verilen cevap nux 12.09.2014 21:32

Etiketlerdeki diğer soruları oku