给截图到ocr翻译这个流程写了个的bash脚本,为了方便使用给它绑了个快捷键,但是里面涉及select选择ocr语言的交互内容,这样就会失效
有什么其他方法可以简单实现这个过程?
给截图到ocr翻译这个流程写了个的bash脚本,为了方便使用给它绑了个快捷键,但是里面涉及select选择ocr语言的交互内容,这样就会失效
有什么其他方法可以简单实现这个过程?
有些命令会提供交互模式和非交互模式两种命令执行方式。你可以看看这个命令有没有非交互模式。
如果一定要交互模式的话,可以尝试下编写 expect 脚本模拟操作。一般情况下,expect 在系统已经被默认装了。
它的操作基本就几个指令。
spawn 用于生成子进程
expect 用于期待字符串
send 模拟人工输入字符串
你可以简单的把它命令使用,也可以把它当成脚本解释器,用来编写脚本语言。
举个例子。
假设我现在有个按菜单选择的脚本,menu,内容如下:
#!/bin/bash
PS3='Please enter your choice: '
options=("Option 1" "Option 2" "Option 3" "Quit")
select opt in "${options[@]}"
do
case $opt in
"Option 1")
echo "you chose choice 1"
;;
"Option 2")
echo "you chose choice 2"
;;
"Option 3")
echo "you chose choice $REPLY which is $opt"
;;
"Quit")
break
;;
*) echo "invalid option $REPLY";;
esac
done
执行的效果如下所示:
通过实现 expect 怎么模拟这个操作,要编写 expect 的脚本。
#!/usr/bin/expect
spawn ./menu # 启动 menu 子进程
expect "enter your choice: " # 期待接收到 enter your choice:
send "1\r" # 输入 1 和 enter
expect "enter your choice: " # 期待接收到 enter your choice:
send "2\r" # 输入 2 和 enter
expect "enter your choice: " # 期待接收到 enter your choice:
send "3\r" # 输入 3 和 enter
expect "enter your choice: " # 期待接收到 enter your choice:
send "4\r" # 输入 4 和 enter
interact
脚本的开头指定了解释器为 /usr/bin/expect。然后,可以测试一下,和手动执行的效果一样的。
但总觉的每次写这个脚本太废事了。于是自动录制的工具产生了,叫做 autoexpect,在 centos 上安装通过 yum install expect-devel 即可完成。
它的使用非常简单,只要执行 autoexpect 就能启动,然后开始执行你要录制的操作。执行完成后,使用 ctrl+D 结束录制,在当前路径会自动生成一个 script.exp。
录制的脚本内容会比自己写的复杂点,但基本的内容差不多。有时候会需要稍微修改。一般清苦下,录制脚本能按预期执行。但对于一些复杂步骤会有些问题,不一定和预期一样,需要稍微修改,比如时间延时之类的,和周围环境有关。
最后,希望这个问题能满足题主的需求。
7 回答5.3k 阅读
4 回答4k 阅读
2 回答5.9k 阅读✓ 已解决
2 回答2.5k 阅读✓ 已解决
1 回答2.4k 阅读✓ 已解决
2 回答827 阅读✓ 已解决
2 回答3.3k 阅读
既然涉及到用户输入,那么肯定需要用户界面,否则就是摸瞎。除非把 select 配出来,映射在不同的快捷键上,通过快捷键的不同来 select 不同的语言,或者加一个 prefix 键,例如 ctrl + b,再加 c,就是 tmux 的方式,可是人家也是有界面的。