Làm thế nào để tôi thực hiện một chương trình X lần trong thiết bị đầu cuối?
Tôi đọc rằng tôi phải thực hiện một bin / bash txt, nhưng tôi không biết cách thực hiện X lần này.
Làm thế nào để tôi thực hiện một chương trình X lần trong thiết bị đầu cuối?
Tôi đọc rằng tôi phải thực hiện một bin / bash txt, nhưng tôi không biết cách thực hiện X lần này.
Câu trả lời:
Bạn có thể sử dụng xargs
và seq
. Nói chung là:
seq nr_of_times_to_repeat | xargs -Iz command
Ví dụ:
seq 10 | xargs -Iz xdotool click 1
sẽ thực thi xdotool click 1
lệnh trong 10 lần.
Mở Terminal và sử dụng bash
lệnh sau :
for i in {1..5}; do xdotool click 1; done
Với một chút dài dòng và độ trễ 1 giây:
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
$
. Nó chỉ ở đó để chỉ ra một dấu nhắc vỏ như thế nào sylvain@sylvain-ThinkPad-T430s:~$
. Chúng ta thường thêm nó vào câu trả lời dòng lệnh để phân biệt lệnh với kết quả của nó.
#!/bin/bash
x=1
while [ $x -le 10 ]
do
<command to run>
x=$(( $x + 1 ))
done
Trong đó 10 là số lần chạy lệnh
nếu bạn cần xây dựng trong một chút nghỉ ngơi:
#!/bin/bash
x=1
while [ $x -le 10 ]
do
<command to run>
sleep 1
x=$(( $x + 1 ))
done
Sao chép tập lệnh vào một tệp trống, thay thế <command to run>
bằng xdotool
lệnh của bạn , lưu nó dưới dạng run_xdotool.sh
, chạy nó bằng lệnh:
sh /path/to/run_xdotool.sh
Ngoài ra, bạn có thể làm cho nó có thể thực thi được và chỉ cần chạy nó bằng cách
/path/to/run_xdotool.sh
Vì bạn đề cập đến việc sử dụng nó để thực hiện các nhấp chuột, cách dễ nhất có thể là sử dụng xdotool
tùy chọn lặp lại tích hợp sẵn của riêng bạn. Định dạng là:
xdotool click --delay <delay> --repeat <repeats> <button>
(delay in milliseconds between the clicks)
Để thực hiện 10 lần nhấp chuột (nút 1) liên tiếp, một giây ở giữa, lệnh là:
xdotool click --delay 1000 --repeat 10 1
Nếu bạn có GNU Parallel, bạn có thể chạy:
seq 10 | parallel -N0 doit
Tất cả các máy tính mới đều có nhiều lõi, nhưng hầu hết các chương trình đều có bản chất nối tiếp và do đó sẽ không sử dụng nhiều lõi. Tuy nhiên, nhiều nhiệm vụ cực kỳ song song:
GNU Parallel là một bộ song song chung và giúp dễ dàng chạy các công việc song song trên cùng một máy hoặc trên nhiều máy bạn có quyền truy cập ssh.
Nếu bạn có 32 công việc khác nhau mà bạn muốn chạy trên 4 CPU, một cách đơn giản để song song là chạy 8 công việc trên mỗi CPU:
GNU Parallel thay vào đó tạo ra một quy trình mới khi kết thúc - giữ cho CPU hoạt động và do đó tiết kiệm thời gian:
Cài đặt
Một cài đặt cá nhân không yêu cầu quyền truy cập root. Nó có thể được thực hiện trong 10 giây bằng cách làm điều này:
(wget -O - pi.dk/3 || curl pi.dk/3/ || fetch -o - http://pi.dk/3) | bash
Để biết các tùy chọn cài đặt khác, hãy xem http://git.savannah.gnu.org/cgit/abul.git/tree/README
Tìm hiểu thêm
Xem thêm ví dụ: http://www.gnu.org/software/abul/man.html
Xem video giới thiệu: https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1
Xem qua hướng dẫn: http://www.gnu.org/software/abul/abul_tutorial.html
Đăng ký danh sách email để nhận được hỗ trợ: https://lists.gnu.org/mailman/listinfo/abul
parallel -N0 doit ::: {1..10}
{1..10}
không hoạt động trong (t) csh / fish / ash, và {1..10}
cấu trúc bị giới hạn bởi độ dài của dòng lệnh, vì vậy điều này sẽ không hoạt động: {1..1000000000}
trong khi đó seq 1000000000
sẽ hoạt động tốt. Nhưng đối với hầu hết các tình huống {1..10}
sẽ hoạt động như mong đợi và tôi cũng thường sử dụng điều đó.
Bạn có thể sử dụng for
vòng lặp kiểu C có lợi thế so với phiên bản mở rộng dấu ngoặc ( {1..5}
) có thể sử dụng các biến để chỉ định điểm kết thúc. Phiên bản tốt hơn là sử dụng tiện ích bên ngoài ( seq
).
t=5
for ((x = 1; x <= t; x++))
do
xdotool click 1
done
Tất cả trên một dòng:
t=5; for ((x = 1; x <= t; x++)); do xdotool click 1; done
Hoặc bạn có thể làm điều đó mà không cần vòng lặp (đối với tiện ích và chức năng cụ thể này):
xdotool click --repeat 5 --delay 50 1
Đơn giản là bạn có thể sử dụng lệnh watch:
watch -n x <your command>
thay đổi x thành thời gian tính bằng giây.
Thí dụ :
watch -n 1 xdotool click 1
Vì vậy, xdotool nhấp 1 sẽ được lặp lại sau mỗi 1 giây, chấm dứt khi bạn hoàn thành.