एक प्रोग्राम को एक्स बार चलाएं


18

मैं टर्मिनल में एक्स प्रोग्राम को कैसे निष्पादित करूं?

मैंने पढ़ा कि मुझे एक बिन / बैश txt करना है, लेकिन मुझे नहीं पता कि इस एक्स को कैसे निष्पादित किया जाए।


यह क्या है, एक स्क्रिप्ट, एक आवेदन, यह क्या करता है? त्रुटियों के मामले में क्या होना चाहिए? इसे चलाने के बाद यह बंद हो जाता है? क्या इसकी जाँच होनी चाहिए कि क्या यह बंद हो गया है?
जैकब व्लिजम

इसका सिर्फ एक क्लिक, xdotool क्लिक I I don’t think it can create a error।
user3597989

@ कासिया: बिल्कुल नहीं, क्योंकि उन सभी उत्तरों को हमेशा के लिए पाला जाता है। यहां ओपी एक निश्चित संख्या में लूप मांगता है।
सिल्वेन पिनेऊ

4
या Blufter: askubuntu.com/a/508752/158442 - लेकिन वे दोनों वहाँ से संबंधित नहीं हैं, लेकिन यहाँ। : डी
मुरु

जवाबों:


24

आप उपयोग कर सकते हैं xargsऔर seq। आम तौर पर:

seq nr_of_times_to_repeat | xargs -Iz command

उदाहरण के लिए:

seq 10 | xargs -Iz xdotool click 1

xdotool click 110 बार कमांड निष्पादित करेगा ।


1
यह शायद सबसे सुरुचिपूर्ण समाधान है, सरलतम का उल्लेख करने के लिए नहीं।
सेठ

मुझे लगता है कि पाइप चरित्र की व्याख्या करने के लिए यह वास्तव में अच्छा उदाहरण है।
पास्कलवूटेन

10

एक टर्मिनल खोलें और निम्न bashकमांड का उपयोग करें :

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

थोड़ी सी शालीनता और 1 एस देरी के साथ:

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

'डू' के साथ सिंटैक्स त्रुटि ..
user3597989

@ user3597989 यह मेरे लिए काम करता है, क्या आप फिर से जांच कर सकते हैं?
सिल्वेन पिनेउ

@ user3597989 ओह मुझे पता है, कृपया पहले हटा दें $। यह सिर्फ एक संकेत की तरह संकेत करने के लिए वहाँ है sylvain@sylvain-ThinkPad-T430s:~$। हम आमतौर पर इसे कमांड लाइन के उत्तर में जोड़ते हैं ताकि कमांड को उसके परिणामों से अलग किया जा सके।
सिल्वेन पिनेउ

@ user3597989: मैंने भ्रम से बचने के लिए शेल प्रॉम्प्ट को हटा दिया
सिल्वेन पिनेउ

5

यह करना चाहिए:

#!/bin/bash

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

जहां कमांड चलाने के लिए 10 बार संख्या है

अगर आपको थोड़ा ब्रेक में निर्माण करने की आवश्यकता है:

#!/bin/bash

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

स्क्रिप्ट को एक खाली फ़ाइल में कॉपी करें, <command to run>अपने xdotoolकमांड द्वारा प्रतिस्थापित करें , इसे सहेजें run_xdotool.sh, इसे कमांड द्वारा चलाएं:

sh /path/to/run_xdotool.sh

वैकल्पिक रूप से, आप इसे निष्पादन योग्य बना सकते हैं और बस इसे चला सकते हैं

/path/to/run_xdotool.sh

एक और उपाय: रिपीट ऑप्शन में xdotool का बनाया हुआ उपयोग करना

चूँकि आप क्लिक करने के लिए इसका उपयोग करने का उल्लेख करते हैं, इसलिए सबसे आसान हो सकता है कि xdotoolआप स्वयं के बनाए हुए रिपीट विकल्प का उपयोग करें। प्रारूप है:

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

एक पंक्ति में 10 माउस क्लिक (1 बटन) करने के लिए, बीच में एक सेकंड, कमांड है:

xdotool click --delay 1000 --repeat 10 1

5

यदि आपके पास जीएनयू समानांतर है तो आप चला सकते हैं:

seq 10 | parallel -N0 doit

सभी नए कंप्यूटरों में एकाधिक कोर होते हैं, लेकिन अधिकांश प्रोग्राम प्रकृति में धारावाहिक होते हैं और इसलिए एकाधिक कोर का उपयोग नहीं करेंगे। हालाँकि, कई कार्य अत्यंत समांतर हैं:

  • कई फाइलों पर एक ही प्रोग्राम चलाएं
  • किसी फ़ाइल में प्रत्येक पंक्ति के लिए एक ही प्रोग्राम चलाएँ
  • किसी फ़ाइल में प्रत्येक ब्लॉक के लिए एक ही प्रोग्राम चलाएँ

जीएनयू समानांतर एक सामान्य समांतरक है और इससे एक ही मशीन पर या आपके द्वारा उपयोग की जाने वाली कई मशीनों पर समानांतर में नौकरी चलाना आसान हो जाता है।

यदि आपके पास 32 अलग-अलग नौकरियां हैं जिन्हें आप 4 सीपीयू पर चलाना चाहते हैं, तो समानांतर करने के लिए एक सीधा आगे का तरीका प्रत्येक सीपीयू पर 8 नौकरियों को चलाना है:

सरल समय निर्धारण

जीएनयू समानांतर इसके बजाय एक नई प्रक्रिया को जन्म देता है जब एक खत्म हो जाता है - सीपीयू को सक्रिय रखना और इस तरह समय की बचत करना:

GNU समानांतर शेड्यूलिंग

स्थापना

एक व्यक्तिगत स्थापना के लिए रूट एक्सेस की आवश्यकता नहीं होती है। इसे 10 सेकंड में किया जा सकता है:

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

अन्य संस्थापन विकल्पों के लिए देखें http://git.savannah.gnu.org/cgit/parallel.git/tree/README

और अधिक जानें

अधिक उदाहरण देखें: http://www.gnu.org/software/parallel/man.html

इंट्रो वीडियो देखें: https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1

ट्यूटोरियल के माध्यम से चलो: http://www.gnu.org/software/parallel/parallel_tutorial.html

समर्थन पाने के लिए ईमेल सूची के लिए साइन अप करें: https://lists.gnu.org/mailman/listinfo/parallel


1
मैं समानांतर प्यार करता हूँ और जहाँ भी मैं कर सकता हूँ इसके उपयोग का सुझाव देने की कोशिश करता हूँ। हालांकि आपके विशिष्ट विकल्प के लिए एक प्रश्न: आप इसके बजाय इस फॉर्म का सुझाव देना क्यों पसंद करते हैंparallel -N0 doit ::: {1..10}
फिलिप-कीन के ली- स्टॉकमैन

1
{1..10}(टी) csh / मछली / राख में काम नहीं करता है, और {1..10}निर्माण तो यह काम नहीं करेगा, कमांड लाइन की लंबाई से सीमित है: {1..1000000000}जबकि seq 1000000000ठीक काम करेंगे। लेकिन ज्यादातर स्थितियों {1..10}में उम्मीद के मुताबिक काम होगा, और मैं अक्सर इसका इस्तेमाल करता हूं।
ओले तांगे

4

आप एक सी स्टाइल forलूप का उपयोग कर सकते हैं जिसमें {1..5}अंतिम बिंदुओं को निर्दिष्ट करने के लिए चर का उपयोग करने में सक्षम होने के ब्रेस-विस्तार संस्करण ( ) पर लाभ है । या तो संस्करण बाहरी उपयोगिता ( seq) का उपयोग करने से बेहतर है ।

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

सभी एक लाइन पर:

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

या आप इसे लूप के बिना करने में सक्षम हो सकते हैं (इस विशिष्ट उपयोगिता और कार्य के लिए):

xdotool click --repeat 5 --delay 50 1

0

बस आप घड़ी कमांड का उपयोग कर सकते हैं:

watch -n x <your command>

सेकंड में x को समय पर बदलें।

उदाहरण :

watch -n 1 xdotool click 1 

तो xdotool क्लिक 1 को हर 1 s दोहराया जाएगा, इसे तब करें जब आपका काम पूरा हो जाए।


4
मुझे लगता है कि कमांड को परिभाषित संख्या को चलाने पर सवाल विशिष्ट है, एक परिभाषित अंतराल पर इतना नहीं।
याकूब वल्जिम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.