janot Asked: 2014-08-24 10:50:54 +0800 CST2014-08-24 10:50:54 +0800 CST 2014-08-24 10:50:54 +0800 CST 在一行中运行多个 xdotool 命令,彼此分开 772 我正在尝试xdotool type word从xdotool key ReturnStartup Aplications Preferences 运行。 但是,如果我使用&&or ;, xdotool 会将其评估为输入的延续。 command-line 2 个回答 Voted Best Answer muru 2014-08-24T12:39:36+08:002014-08-24T12:39:36+08:00 长话短说: 使用脚本。 #! /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'. ;通过or进行命令链接&是不可能的,因为那是 shell 语法,而启动应用程序不支持 shell 语法。但是,如果您只想Enter在键入内容后按下,则有一种迂回的方法。 当它说“ASCII”换行符时,它并不意味着一个裸露的\n. 命令替换 ( xdotool type "$(printf '\n')", say) 会吃掉尾随的换行符。在这个xdotools论坛帖子之后,我尝试了这个: xdotool type "$(printf 'date\n ')" 它奏效了。但它只有在 之后有一些字符时才有效\n,这显然会留下一个尾随空格,这不是你想要的。我将其修改为: xdotool type "$(printf 'date\n\e ')" 这有效并且没有留下尾随空间。然而,对于那些在他们的 shell 中使用 Vi 模式的人来说,这可能会导致问题。 感谢@steeldriver 的评论,我发现这是因为我在执行命令的终端上进行了尝试。Enter在我的按下和命令之间只有很小的差距xdotool就足以让一个换行符被正确注册。因此: 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 脚本。 我可能一直在看东西,但在我的前几次尝试中,我不得不在和命令sleep之间typekey放置一个(小) 。这是在执行命令的终端而不是另一个窗口上尝试它的产物。 anthony 2014-12-18T18:45:15+08:002014-12-18T18:45:15+08:00 在我看来,该应用程序并未解析多个命令,而是将其视为单个命令。因此,通过将其包装为 shell 调用使其成为单个命令... bash -c 'xdotool type date; xdotool key Return' 现在你还可以做其他的 shell 事情...... bash -c 'xdotool type "`date +"%Y-%m-%d_%T`"' 请注意,最后使用的“date”命令包含一个换行符!并且“xdotool”将输出它。 注意:如果您将其作为键盘宏来执行此操作,我还会向“xdotool”添加更多选项以使其更好地工作...... bash -c 'xdotool type --clearmodifiers -delay 0 "`date +"%Y-%m-%d_%T`"'
长话短说:
使用脚本。
并将脚本的路径放在该
Exec
字段中。很长的故事:
根据
xdotool
联机帮助页:;
通过or进行命令链接&
是不可能的,因为那是 shell 语法,而启动应用程序不支持 shell 语法。但是,如果您只想Enter在键入内容后按下,则有一种迂回的方法。当它说“ASCII”换行符时,它并不意味着一个裸露的
\n
. 命令替换 (xdotool type "$(printf '\n')"
, say) 会吃掉尾随的换行符。在这个xdotools
论坛帖子之后,我尝试了这个:它奏效了。但它只有在 之后有一些字符时才有效
\n
,这显然会留下一个尾随空格,这不是你想要的。我将其修改为:这有效并且没有留下尾随空间。然而,对于那些在他们的 shell 中使用 Vi 模式的人来说,这可能会导致问题。
感谢@steeldriver 的评论,我发现这是因为我在执行命令的终端上进行了尝试。Enter在我的按下和命令之间只有很小的差距
xdotool
就足以让一个换行符被正确注册。因此:因此,要么通过引用它来扩展该行:
或者使用@steeldriver 建议的 shell 解释看起来是正确的选择。
但是,一个脚本包含:
在
Exec
现场工作得很好。事实上,我总是建议在桌面文件中使用脚本来执行复杂的命令。/usr/bin/xdotool
你可以在 shebang中有一个脚本,但是联机帮助页说“script
模式没有完全充实,可能低于你的期望”,所以我坚持使用 bash 脚本。我可能一直在看东西,但在我的前几次尝试中,我不得不在和命令放置一个(小) 。这是在执行命令的终端而不是另一个窗口上尝试它的产物。sleep
之间type
key
在我看来,该应用程序并未解析多个命令,而是将其视为单个命令。因此,通过将其包装为 shell 调用使其成为单个命令...
现在你还可以做其他的 shell 事情......
请注意,最后使用的“date”命令包含一个换行符!并且“xdotool”将输出它。
注意:如果您将其作为键盘宏来执行此操作,我还会向“xdotool”添加更多选项以使其更好地工作......