我有一个shell脚本test.sh,它在内部调用Java应用程序MyApp。
#!/bin/bash
# Invoking MyApp
java MyApp
MyApp从控制台读取2个参数,用户名和密码。运行此脚本将执行Java应用程序,该应用程序将提示用户输入用户名和密码
Username: user
Password: ****
我想自动执行这个shell脚本。如何将用户名和密码作为参数传递给脚本test.sh?
我尝试过的事情:
将间接运算符与包含参数
的文件一起使用$ ./test.sh <input
使用上述方法的快捷方式
$ ./test.sh <<!
user
password
!
在两种情况下,MyApp.java中的Console console = System.console();
都将console
设置为null。
PS:寻找在不修改脚本或Java应用程序的情况下实现此目的的方法。 &#34;不,这不可能做到!&#34;也是一个可以接受的答案。
答案 0 :(得分:3)
Echo可用于管道(|
)输入到任何程序:
echo -ne "user\npassword\n" | java MyApp
(此处换行符\n
表示正在按下的返回键,-n
停止echo
追加另一个换行符,-e
启用新换行符的插入)
答案 1 :(得分:2)
程序expect可用于模拟人机控制台输入:
#!/usr/bin/expect
spawn ./test.sh
expect "Username: "
send "user\r"
expect "Password: "
send "password\r"
interact
(将其复制到文件中,然后运行文件,例如./expect_script.sh
)
答案 2 :(得分:0)
Echo可用于管道(Play.current
)输入到任何程序:
|
(此处换行符echo -ne "user\npassword\n" | ./test.sh
表示正在按下的返回键,\n
停止-n
追加另一个换行符,echo
启用新换行符的插入)