如何为shell脚本中调用的java应用程序提供用户输入?

时间:2016-08-09 13:54:00

标签: java shell

我有一个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;也是一个可以接受的答案。

3 个答案:

答案 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启用新换行符的插入)

相关问题