在一行中分开运行多个xdotool命令

Modified on: Sat, 09 Jun 2018 03:39:53 +0800

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

作者:,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'.

无法通过;&进行命令链接,因为这是shell语法,而Startup Applications不支持shell语法。但是,如果您想要做的只是在输入内容后按 Enter ,则可以采用迂回方式。

当它显示“ASCII”换行符时,它并不意味着裸\n。命令替换(xdotool type "$(printf '\n')",比如说)吃尾随换行符。在xdotools论坛帖子之后,我试过这个:

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

它有效。但它只有在\n之后有一些字符才有效,这显然会留下一个尾随空格,这不是你想要的。
我将其修改为:

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

这样可以工作,不会留下任何尾随空间。但是,它可能会导致在shell中使用Vi模式的用户出现问题。

感谢@ steeldriver的评论我发现这是因为我在我执行命令的终端上试了一下。我按 Enter xdotool命令之间的差距足以让一个换行符正确注册。因此:

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

所以要么通过引用来扩展该行:

sleep 0.1; xdotool type $'date\n'

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

但是,脚本包含:

xdotool type 'date
'

Exec字段中的

工作正常。实际上,我总是建议在桌面文件中使用复杂命令的脚本。

您可以在shebang中使用/usr/bin/xdotool创建一个脚本,但该联机帮助页显示“script模式未完全充实,可能会低于你的期望“,所以我坚持使用bash脚本。

我可能已经看到了一些东西,但是在我的前几次尝试中,我不得不在sleep / code>和type命令。这是在执行命令而不是另一个窗口的终端上尝试它的工件。

作者:Community,muru

相关问答

添加新评论