我使用第三方提供的应用程序执行了一些操作序列。我想编写一个 bash 脚本,以便可以从终端执行整个操作。但为此,我需要知道当我单击按钮或设置某些参数时应用程序正在执行的内部函数。此外,是否甚至可以仅使用终端命令来控制 GUI?任何帮助都将不胜感激。
答案1
要通过终端命令控制 GUI 应用程序,您可以使用xdotool
和等工具xsel
。
xdotool
模拟按键和鼠标动作。因此,您可以编写一个脚本,按顺序将按键和鼠标点击发送给应用程序,该应用程序将与这些按键和鼠标进行交互,就像您亲自使用键盘和鼠标一样。
xsel
或者xclip
是允许您从命令行检索或设置剪贴板的工具。
仅作为一个例子并给出它如何工作的初步想法,以下命令将选择光标前的一个单词并将其剪切到剪贴板。
xdotool key ctrl+shift+Left ctrl+x
然后,您的脚本可以检索剪贴板选择并对其进行处理:
SELECTION=$(xsel -b)
一些评论:
- 这些工具只能在 X 上可靠地工作,在新的显示服务器 Wayland 上则不能,或者可靠性较低
- 您需要包含足够的延迟。如果延迟太快,系统可能会丢弃按键。在这方面调整脚本需要时间。但是,如果您成功了,您将能够以更快的速度重复相同的任务,并且不会出错。
答案2
一个非常简单的带有 GUI 的 shell 脚本,它:
- 检查 Firefox 的版本。
- 如果未找到 Firefox 版本,则假定未安装,并会抛出一条如何安装的消息。
- 只有单击“确定”后,Firefox 才可启动。
你可以根据自己的需要进行更改:
#!/bin/bash
clear;
firefox --version >/dev/null 2>&1;
check=$?
if [ "$check" != "0" ]; then
echo "Firefox not found!"
zenity --width=300 --info --text="
How to install:
sudo apt-get install firefox" 2> /dev/null
exit 1
elif [ "$check" = "0" ]; then
echo "Found:"
firefox --version;
anser=$(zenity --title="Firefox Launcher" --info --text "Launch Firefox?" --ok-label="OK" --width=150 2> /dev/null)
response=$?
fi
if [ "$response" = "0" ]; then
echo "Launching Firefox..."
firefox 2> /dev/null;
echo "Firefox has been launched"
elif [ "$response" = "1" ]; then
echo "Quit"
fi
将上述代码复制到文本编辑器并将文件命名为您喜欢的任何名称,将其保存在桌面目录中(或任何你喜欢的地方)
我假设脚本文件位于您的桌面目录中。
要执行脚本,请启动终端并输入:
bash ~/Desktop/yourfile
答案3
如果您只想控制 Firefox 之类的东西,那么像 Selenium 之类的东西就可以工作(该命令也Firefox https://www.google.com
可以工作)例如:(这是 Python 3,但类似的东西可以在 Java 上运行)
from selenium import webdriver #import the webdriver object
browser = webdriver.Firefox() # open a Firefox window, this also
requires a firefox driver (geckodriver)
browser.get("https://www.google.com")
searchbar = browser.find_element_by_css_selector("input")
searchbar.send_keys("example google search")
但是如果您想运行一些其他的东西,那么请尝试研究 x-runner 之类的东西。
如果你正在寻找 windows,那么 winrunner