如何让 shell 脚本产生与按键等效的效果?

如何让 shell 脚本产生与按键等效的效果?

我想编写一个 shell 脚本,执行录制的宏所执行的操作并重播按键。特别是生成ctrl+ a

这可能吗?

我尝试过类似的方法echo \0141,但它只是说没有command \0141

答案1

你尝试过 Expect 吗?

答案2

在 X11 中,你也许能够使用xdotool

xdotool key ctrl+a

答案3

应用程序运行时通常会重置终端特性,因此按 ctrl-a 实际上可能会被记录为 ASCII 1。或者一系列击键。

在控制台中,按 ctrl-v ctrl-a 可显示 ^A,然后您可获得

 echo ^A | od -x
0000000 010a

其中 01 是 ctrl-a。

因此,重点是:

为了“编写”某些内容,您必须捕获终端设置,记住它们,然后在重放期间重置它们。在 shell 脚本中,这意味着解析

stty -a

并将其保存为允许您在重播期间将其发送回 stty 的格式,然后将数据流发送到终端。

终端驱动程序、图形界面等使这一过程变得非常复杂。

要获得“纯” ctrl-a,请使用 ctrl-v ctrl-a - 仅在控制台中,不一定在编辑器内。

答案4

这是我之前制作的文档页面

Serge 对 Web 开发的标准步骤感到厌倦:

  1. 保存存档
  2. 切换到浏览器(无论什么快捷方式,通常是 alt+tab)
  3. 刷新页面
  4. 查看页面是否正常
  5. 返回编辑器

所以他决定让事情稍微自动化一点;)

他如何改善这种情况:

  1. 安装 xdotool

$ sudo apt-get 安装 xdotool

  1. 创建 xdotool 脚本
$ mkdir 文件/脚本
$ vim Documents/scripts/vim-browser-vim.sh
[...]
/bin/bash #!/bin/bash

# 搜索标题中包含“编码”的窗口并发送键以在 vim 中保存当前文档
xdotool 搜索“编码”键“Escape”“冒号”“w”“Return”

# 搜索标题中包含“Studyladder”的窗口,激活它并刷新(在 Chrome 中为 Ctrl+r)
xdotool 搜索“Studyladder”窗口激活键“Ctrl+r”

# 搜索标题中包含“编码”的窗口并激活它
xdotool 搜索“编码”窗口激活
[...]
chmod u+x 文档/脚本/vim-browser-vim.sh
  1. 将脚本连接到快捷方式

在 GNOME 中:任务栏 > 系统 > 首选项 > 键盘快捷键 > 添加

名称:vim-browser-vim 命令:/home/srivest/Documents/scripts/vim-browser-vim.sh

然后“应用”。

接下来指定您选择的快捷键。我使用了 Ctrl+2,我只是觉得手指很懒,需要锻炼一下 ;)

单击“关闭”。

  1. 将控制台的名称更改为“Coding”,以便 xdotool 脚本可以找到它。

现在您可以通过按快捷方式来执行脚本!

生活改变!呵呵。。

--

故障排除:

如果脚本不起作用,您需要寻找以下事项:

  1. 是否安装了 xdotool
  2. 脚本是否可以执行
  3. 所有窗口是否存在,它们的标题栏是否与脚本中的搜索语句匹配。例如,在示例中,我搜索studyadder。如果未在studyladder页面上打开浏览器选项卡,则顶部的标题不会显示studyladder,并且找不到该窗口。
  4. 很多窗口都具有相同的名称... 需要避免。如果您很急切,可以查看 xdotool 堆栈。
  5. GNOME 快捷方式中的脚本路径是正确的。

附言:不要尝试生成 ALT+TAB 和其他桌面组合键。这实际上可以在控制台中工作,但在 gnome 快捷方式系统启动时则不行。我在这里假设此快捷方式代码将脚本启动到其自己的沙箱中,并且生成诸如 Alt+Tab 来切换应用程序之类的东西将不起作用,因为该沙箱中没有应用程序。尝试使其工作浪费了数小时。

相关内容