AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 515185
Accepted
janot
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 2 个回答
  • 17500 Views

2 个回答

  • Voted
  1. 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放置一个(小) 。这是在执行命令的终端而不是另一个窗口上尝试它的产物。

    • 16
  2. 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`"'
    
    • 1

相关问题

  • 如何从命令行仅安装安全更新?关于如何管理更新的一些提示

  • 如何从命令行刻录双层 dvd iso

  • 如何从命令行判断机器是否需要重新启动?

  • 文件权限如何工作?文件权限用户和组

  • 如何在 Vim 中启用全彩支持?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve