Chạy một số lệnh xdotool trong một dòng tách biệt với nhau


11

Tôi đang cố gắng chạy xdotool type wordsau đó xdotool key Returntừ Tùy chọn ứng dụng khởi động.
Nhưng nếu tôi sử dụng &&hoặc ;, xdotool đánh giá nó là sự tiếp tục của đầu vào.


1
Trong trường hợp sử dụng của tôi, nó hoạt động với xdotool type $'word\r', trong đó $''thoát khỏi \rcái gì đó như trả lại ( \nkhông hoạt động ở đây).
Scz

Câu trả lời:


16

Câu chuyện dài:
Sử dụng một kịch bản.

#! /bin/sh
# With some window selection magic, or a sleep 
# if you want to do that manually.
xdotool type word
xdotool key Return

Và đặt đường dẫn của kịch bản vào Exectrường.


Câu chuyện dài:

Theo xdotooltrang hướng dẫn :

type
       Supports newlines and tabs (ASCII newline and tab). 
       With respect to "COMMAND CHAINING", this command consumes the
       remainder of the arguments and types them. That is, no commands can
       chain after 'type'.

Lệnh chuỗi thông qua ;hoặc &không thể thực hiện được, vì đó là cú pháp shell và Ứng dụng khởi động không hỗ trợ cú pháp shell. Tuy nhiên, nếu tất cả những gì bạn muốn làm là nhấn Entersau khi gõ một cái gì đó, có một cách làm tròn để làm như vậy.

Khi nó nói dòng mới "ASCII", nó không có nghĩa là trần \n. Và thay thế lệnh ( xdotool type "$(printf '\n')", nói) ăn các dòng mới. Sau xdotoolsbài đăng diễn đàn này , tôi đã thử điều này:

xdotool type "$(printf 'date\n ')"

Va no đa hoạt động. Nhưng nó chỉ hoạt động nếu có một số nhân vật sau đó \n, và điều này rõ ràng để lại một khoảng trống, đó sẽ không phải là những gì bạn muốn. Tôi đã sửa đổi nó thành:

xdotool type "$(printf 'date\n\e ')"

Và điều này hoạt động và không để lại không gian dấu. Tuy nhiên, nó có thể gây ra sự cố cho những người sử dụng chế độ Vi trong vỏ của họ.

Nhờ những bình luận của @ Steeldo mà tôi nhận ra rằng điều này là do tôi đã thử nó trên chính thiết bị đầu cuối mà tôi đang thực hiện các lệnh trên. Chỉ cần một khoảng cách nhỏ giữa việc nhấn Enterxdotoollệnh của tôi là đủ để một dòng mới được đăng ký chính xác. Như vậy:

sleep 0.1; xdotool type $'date\n'

Vì vậy, hoặc mở rộng dòng bằng cách trích dẫn nó:

xdotool type 'date
'

hoặc sử dụng giải thích shell như @steel ấn được đề xuất trông giống như tùy chọn đúng.

Tuy nhiên, một tập lệnh chứa:

#! /bin/sh
sleep 1
xdotool type date
xdotool key Return

trong Execlĩnh vực làm việc tốt. Thật vậy, tôi luôn khuyên bạn nên sử dụng tập lệnh cho các lệnh phức tạp trong tệp trên máy tính để bàn.

Bạn có thể có một tập lệnh với /usr/bin/xdotoolshebang, nhưng trang này cho biết " scriptchế độ không hoàn toàn được bổ sung và có thể nằm dưới mức mong đợi của bạn", vì vậy tôi bị mắc kẹt với các tập lệnh bash.

Tôi có thể đã nhìn thấy mọi thứ, nhưng trong vài lần thử đầu tiên, tôi đã phải đặt một (nhỏ) sleepgiữa các lệnh typekeylệnh . Đó là một tạo tác của việc thử nó trên thiết bị đầu cuối đang thực thi các lệnh thay vì một cửa sổ khác.


Một literal newline dường như làm việc tức là xdotool type 'wordsau phím 'Enter' và sau đó đóng cửa ', cũng như $'word\n'(trong đó bash mở rộng \nđến một dòng mới theo nghĩa đen trước khi đi qua các lập luận để xdotool).
Steeldo

@steel ấn hit-and-miss. Đó là một trong những điều đầu tiên tôi đã thử và không hoạt động.
muru

@steel ấn Điều gì đã làm việc là hai dòng mới (hai mục nhập trước khi đóng 'hoặc hai \ngiây với $thủ thuật).
muru

thật kỳ lạ, dòng mới bổ sung dường như không cần thiết đối với tôi - tôi tự hỏi liệu nó có phụ thuộc vào ứng dụng sở hữu cửa sổ mục tiêu không (tôi đang sử dụng một tài liệu trống trong geany)?
Steeldo

@steel ấn cảm ơn vì tiền boa. Vui mừng khi biết tôi không bị ảo giác về nhu cầu sleep(xem ghi chú trong văn bản nhỏ). Tôi đã không thay đổi các cửa sổ và chỉ thử nó trên cùng một cửa sổ, nhưng với một sleep 1, cả hai phương pháp đều hoạt động với cả hai cửa sổ và sau khi chuyển đổi. Tôi đoán phím nhấn Enter của riêng tôi bằng cách nào đó đã can thiệp vào dòng mới xdotool. Tuy nhiên, đối với yêu cầu phức tạp hơn của tệp máy tính để bàn, tôi vẫn đề xuất tập lệnh.
muru

1

Dường như với tôi ứng dụng không phân tích cú pháp nhiều lệnh, nhưng lại coi nó là một lệnh đơn. Vì vậy, làm cho nó trở thành một lệnh duy nhất bằng cách gói nó một lệnh gọi shell ...

bash -c 'xdotool type date; xdotool key Return'

Bây giờ bạn cũng có thể làm những thứ vỏ khác ...

bash -c 'xdotool type "`date +"%Y-%m-%d_%T`"'

Lưu ý rằng lệnh "ngày" được sử dụng cuối cùng bao gồm một dòng mới! và "xdotool" sẽ xuất nó.

LƯU Ý: nếu bạn đang làm điều này dưới dạng macro bàn phím, tôi cũng sẽ thêm một vài tùy chọn nữa vào "xdotool" để làm cho công việc này tốt hơn ...

bash -c 'xdotool type --clearmodifiers -delay 0 "`date +"%Y-%m-%d_%T`"'
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.