Terminalde bir programı X kez nasıl yürütebilirim?
Ben bir bin / bash txt yapmak zorunda okudum, ama bu X kez yürütmek için nasıl bilmiyorum.
Terminalde bir programı X kez nasıl yürütebilirim?
Ben bir bin / bash txt yapmak zorunda okudum, ama bu X kez yürütmek için nasıl bilmiyorum.
Yanıtlar:
Sen kullanabilirsiniz xargs
ve seq
. genelde:
seq nr_of_times_to_repeat | xargs -Iz command
Örneğin:
seq 10 | xargs -Iz xdotool click 1
xdotool click 1
komutu 10 kez yürütür .
Bir Terminal açın ve aşağıdaki bash
komutu kullanın:
for i in {1..5}; do xdotool click 1; done
Biraz ayrıntı ve 1 saniye 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
$
. Sadece bir kabuk istemi belirtmek için orada sylvain@sylvain-ThinkPad-T430s:~$
. Genellikle komutu sonuçlarından ayırmak için komut satırı yanıtlarına ekleriz.
#!/bin/bash
x=1
while [ $x -le 10 ]
do
<command to run>
x=$(( $x + 1 ))
done
burada 10 komutu çalıştırma sayısıdır
küçük bir mola vermeniz gerekiyorsa:
#!/bin/bash
x=1
while [ $x -le 10 ]
do
<command to run>
sleep 1
x=$(( $x + 1 ))
done
Yerine, boş bir dosya içine komut dosyasını kopyalayın <command to run>
senin tarafından xdotool
olarak kaydedin, komuta run_xdotool.sh
, komutla çalıştırın:
sh /path/to/run_xdotool.sh
Alternatif olarak, çalıştırılabilir hale getirebilir ve
/path/to/run_xdotool.sh
Tıklama yapmak için kullandığınızdan bahsettiğinizden, en kolayı xdotool
kendi yerleşik tekrarlama seçeneğini kullanmak olabilir . Biçim:
xdotool click --delay <delay> --repeat <repeats> <button>
(delay in milliseconds between the clicks)
Arada bir saniye arayla 10 fare tıklaması (düğme 1) yapmak için komut şu şekildedir:
xdotool click --delay 1000 --repeat 10 1
GNU Paraleliniz varsa şunları çalıştırabilirsiniz:
seq 10 | parallel -N0 doit
Tüm yeni bilgisayarların birden fazla çekirdeği vardır, ancak çoğu program seri niteliktedir ve bu nedenle birden çok çekirdeği kullanmayacaktır. Bununla birlikte, birçok görev son derece paralelleştirilebilir:
GNU Parallel genel bir paralelleştiricidir ve işleri aynı makinede veya ssh erişimine sahip olduğunuz birden fazla makinede paralel olarak çalıştırmayı kolaylaştırır.
4 CPU'da çalıştırmak istediğiniz 32 farklı işiniz varsa, paralelleştirmenin basit bir yolu her CPU'da 8 iş çalıştırmaktır:
Bunun yerine GNU Parallel, işlemci bittiğinde yeni bir süreç oluşturur - CPU'ları aktif tutar ve böylece zamandan tasarruf sağlar:
Kurulum
Kişisel kurulum root 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 kurulum seçenekleri için bkz. Http://git.savannah.gnu.org/cgit/parallel.git/tree/README
Daha fazla bilgi edin
Daha fazla örneğe bakın: http://www.gnu.org/software/parallel/man.html
Giriş videolarını izleyin: https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1
Eğiticiyi gözden geçirin: http://www.gnu.org/software/parallel/parallel_tutorial.html
Destek almak için e-posta listesine kaydolun: https://lists.gnu.org/mailman/listinfo/parallel
parallel -N0 doit ::: {1..10}
{1..10}
(T), CSH / balık / kül çalışmaz, ve {1..10}
bu iş olmayacak şekilde yapı, komut hattı uzunluğu ile sınırlıdır: {1..1000000000}
oysa seq 1000000000
sadece iyi çalışır. Ancak çoğu durum {1..10}
beklendiği gibi çalışacaktır ve ben de bunu sık sık kullanıyorum.
Bitiş noktalarını belirtmek için değişkenleri kullanabilmenin for
avantajına sahip olan bir C stili döngü {1..5}
kullanabilirsiniz. Her iki sürüm de harici bir yardımcı program ( seq
) kullanmaktan daha iyidir .
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
Veya bunu bir döngü olmadan yapabilirsiniz (bu belirli yardımcı program ve işlev için):
xdotool click --repeat 5 --delay 50 1
Sadece watch komutunu kullanabilirsiniz:
watch -n x <your command>
x değerini saniye cinsinden zamana değiştirin.
Misal :
watch -n 1 xdotool click 1
Yani xdotool tıklama 1 her 1 saniyede bir tekrarlanacaktır, işiniz bittiğinde sonlandırın.