我正在尝试sh
使用 Java 应用程序执行脚本ProcessBuilder
。脚本检查浏览器文件上传窗口,然后选择它,然后提供新图像并提交。使用脚本自动执行浏览器的文件上传窗口。
当我尝试从终端执行脚本时,一切都正常。
但是当我使用 Java 应用程序执行相同的脚本时ProcessBuilder
,我得到的是/usr/bin/xdotool: No such file or directory
。我尝试了不同的方法,在同一个脚本中添加"/usr/bin/"
或path
使用绝对路径,还尝试通过从 Java 调用另一个脚本来运行脚本,然后从该脚本调用实际脚本。我想现在我遇到了瓶颈。不知何故,从 Java,我无法访问 bash shell 的所有功能。
测试文件
#!/bin/bash
file="/home/ankit/workspace/test.jpg"
browser="chrome"
win_name="Open File"
echo "Looking for the window of the '$browser' browser with name '$win_name'"
WIN=$(for pid in $(/usr/bin/xdotool search --class "$browser"); do if [[ $(/usr/bin/xdotool getwindowname $pid) == "$win_name" ]]; then echo $pid; fi; done)
/usr/bin/xdotool windowactivate $WIN
/usr/bin/xdotool type "$file"
/usr/bin/xdotool key alt+o
Java 方法
private void selectImageFromFileUploadDialog() throws IOException, InterruptedException {
try {
ProcessBuilder pb = new ProcessBuilder("/bin/bash", "/home/ankit/workspace/resource/handle_file_dialog/run.sh");
pb.inheritIO();
Process process = pb.start();
process.waitFor();
} catch(Exception e) {
e.printStackTrace();
}
}
更新-1: 我检查了 bash 模式,两者都不是。不确定这是否有帮助
if [[ -o emacs ]]; then
echo emacs mode
elif [[ -o vi ]]; then
echo vi mode
else
echo neither
fi