在彼此分开的一行中运行几个xdotool命令


11

xdotool type word然后xdotool key Return,我尝试从“启动应用程序首选项” 运行。
但是,如果我使用&&;,xdotool会将其评估为输入的延续。


1
在我的用例中,它与一起使用xdotool type $'word\r',在其中$''转义\r到return之类的东西(\n在这里不起作用)。
Scz 2016年

Answers:


16

长话短说:
使用脚本。

#! /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的评论,我发现这是由于我在执行命令的终端上对其进行了尝试。在我按下Enterxdotool命令之间只有很小的间隔就足以正确地注册单个换行符。从而:

sleep 0.1; xdotool type $'date\n'

因此,要么通过引用扩展该行:

xdotool type 'date
'

或使用@steeldriver建议的shell解释看起来像正确的选项。

但是,脚本包含:

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

Exec现场工作得很好。确实,我总是建议对桌面文件中的复杂命令使用脚本。

您可以/usr/bin/xdotool在shebang中使用脚本,但联机帮助页上显示​​“ script模式尚未完全充实,可能会低于您的期望”,因此我坚持使用bash脚本。

我可能一直在看东西,但是在最初的几次尝试中,我不得不sleeptypekey命令之间放置一个(小)。那是在正在执行命令的终端而不是另一个窗口上尝试它的人工产物。


一个文字换行似乎工作即xdotool type 'word其次是“Enter”键,然后关闭'一样,$'word\n'(其中的bash扩展\n到字面换行符传递参数之前xdotool)。
steeldriver 2014年

@steeldriver命中注定。那是我尝试但没有奏效的第一件事。
muru

@steeldriver起作用的是两个换行符(在使用技巧关闭'或两个\ns 之前先输入两次 Enter $)。
muru

奇怪,我似乎不需要多余的换行符-我想知道这是否取决于拥有目标窗口的应用程序(我在geany中使用空文档)?
steeldriver

@steeldriver感谢您的提示。很高兴知道我没有对需求的幻想sleep(请参阅小文本中的注释)。我不是在更改窗口,而是在同一窗口上尝试,而是使用sleep 1,这两种方法都在同一窗口和切换后都起作用。我猜我自己的Enter键在某种程度上干扰了xdotool换行符。但是,对于更复杂的桌面文件要求,我仍然建议使用该脚本。
muru

1

在我看来,该应用程序未解析多个命令,而是将其视为单个命令。这样,通过将其包装成一个shell调用即可使其成为单个命令...

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

现在您还可以执行其他shell任务...

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

请注意,最后使用的“日期”命令包括换行符!然后“ xdotool”将输出它。

注意:如果您是作为键盘宏来执行此操作,我还将在“ xdotool”中添加一些其他选项,以使此功能更好地工作...

bash -c 'xdotool type --clearmodifiers -delay 0 "`date +"%Y-%m-%d_%T`"'
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.