请注意,我没有编写任何这些脚本、Java 代码或应用程序,并且我在这些脚本中可以修改的内容受到限制。
我有一个启动 Java 控制台的 Bash 脚本/foo/bar/myscript.sh
。在内部指定,它调用启动 Java 控制台,但在启动 shell 之前提示输入密码。我正在尝试将命令传递到 Java 控制台,以执行应用程序的备份过程。
有没有办法运行传递密码的脚本?密码不是通过 Bash 设置的,而是在 Java 中的某个地方设置的,我不知道变量名称。
还有一种方法可以在同一行中传递Java方法吗?这是正常的手动过程:
./myScript.sh
Please enter password: myPassword
javaConsole % backup.method("/backup/dir");
显然这是不正确的,但理想情况下,命令应如下所示:
echo myPassword | ./myscript.sh | backup.method("/backup/dir");
答案1
可能是这样,因为这会生成您的脚本,回答密码提示,然后我不确定您的 Java 控制台提示是什么样子或者它到底期望什么,但是:
#!/usr/bin/env expect
spawn -noecho ./myScript.sh
expect -ex password
send -raw "Hunter2\r"
expect -ex javaConsole
send -raw "backup.method(\"/backup/dir\");\r"
# and either you'll need to wait or interact with the java
# to keep it running...
interact
您还可以运行试用会话autoexpect
,然后查看自动化生成的内容。
答案2
echo 'myPassword
/backup/dir' | /foo/bar/myscript.sh