web-dev-qa-db-ja.com

互いに分離された1行で複数のxdotoolコマンドを実行する

Startup Aplications Preferencesからxdotool type Wordを実行してからxdotool key Returnを実行しようとしています。
しかし、&&または;を使用すると、xdotoolはそれを入力の継続として評価します。

9
janot

短い話:
スクリプトを使用します。

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

そして、Execフィールドにスクリプトのパスを入力します。


長い話:

xdotoolマンページ によると:

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'.

;または&を介したコマンドチェーンはシェル構文であり、スタートアップアプリケーションはシェル構文をサポートしていないため、使用できません。ただし、押したいだけの場合 Enter 何かを入力した後、迂回する方法があります。

「ASCII」改行を言うとき、それは裸の\nを意味しません。また、コマンド置換(xdotool type "$(printf '\n')"、たとえば)は末尾の改行を使います。これに続いて xdotoolsフォーラム投稿 、私はこれを試しました:

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

そしてそれは働いた。しかし、それは\nの後に文字がある場合にのみ機能し、これは明らかに末尾のスペースを残します。私はそれを次のように変更しました:

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

そして、これは機能し、後続スペースを残しません。ただし、シェルでViモードを使用している場合、問題が発生する可能性があります。

@ steeldriver's comments のおかげで、これはコマンドを実行していたまさにその端末で試してみたことに起因することがわかりました。私のプレスの間のほんの小さなギャップ Enter xdotoolコマンドは、単一の改行を正しく登録するのに十分でした。副<文>この[前述の事実の]結果として、それ故に、従って、だから◆【同】consequently; therefore <文>このような方法で、このようにして、こんなふうに、上に述べたように◆【同】in this manner <文>そのような程度まで<文> AひいてはB◆【用法】A and thus B <文>例えば◆【同】for example; as an example:

sleep 0.1; xdotool type $'date\n'

したがって、引用して行を延長するか、

xdotool type 'date
'

または、@ steeldriverが提案したシェルの解釈を使用すると、正しいオプションのように見えます。

ただし、次を含むスクリプト:

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

Execフィールドでは正常に機能しました。実際、デスクトップファイル内の複雑なコマンドにはスクリプトを使用することを常にお勧めします。

Shebangで/usr/bin/xdotoolを使用したスクリプトを作成できますが、マンページには「scriptモードは完全に具体化されておらず、期待を下回る可能性があります」と書かれているため、bashスクリプトにこだわっています。

私は物事を見ていたかもしれませんが、最初の数回の試行では、sleepコマンドとtypeコマンドの間に(小さな)keyを挿入する必要がありました。これは、別のウィンドウの代わりにコマンドを実行していた端末で試してみた結果でした。

14
muru

アプリケーションは複数のコマンドを解析しているのではなく、単一のコマンドとして処理しているようです。そのため、シェル呼び出しをラップすることで単一のコマンドにします...

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

これで、他のシェルの操作も実行できます...

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

最後に使用した「date」コマンドには改行が含まれていることに注意してください。 「xdotool」はそれを出力します。

注:キーボードマクロとしてこれを行っている場合は、「xdotool」にさらにいくつかのオプションを追加して、この機能を改善します。

bash -c 'xdotool type --clearmodifiers -delay 0 "`date +"%Y-%m-%d_%T`"'
1
anthony