我创建了shell脚本来添加两个数字。我想从java执行那个shell脚本,我正在使用Jsch库。你能帮我解决这个问题。
first_num=0
second_num=0
echo -n "Enter the first number-->"
read first_num
echo -n "Enter the second number-->"
read second_num
echo "first number + second number = $ (( first_num + second_num ))"
是。我检查了“Jsch”站点中的示例,但我无法输入shell脚本的输入。
我按你说的试过了。请参阅以下代码String command = "bash /home/opt/addtwonumber.sh 1 2"
我改变了下面提到的shell脚本
$first_num
$second_num
echo "first number + second number = $ (( first_num + second_num ))"
但它不起作用。我得到的结果如
first_number + second_number = 0
答案 0 :(得分:0)
来自示例:
String user = "USERNAME";
host = "HOSTNAME";
UserInfo ui=new MyUserInfo();
session.setUserInfo(ui);
session.connect();
Session session=jsch.getSession(user, host, 22);
String command = "YOUR_SCRIPTFILE_HERE PARAMETER_ONE PARAMETER_TWO";
Channel channel = session.openChannel("exec");
((ChannelExec) channel).setCommand(command);
channel.setInputStream(null);
((ChannelExec) channel).setErrStream(System.err);
InputStream in = channel.getInputStream();
channel.connect();
byte[] tmp = new byte[1024];
while (true) {
while (in.available() > 0) {
int i = in.read(tmp, 0, 1024);
if (i < 0)
break;
System.out.print(new String(tmp, 0, i));
}
if (channel.isClosed()) {
if (in.available() > 0)
continue;
System.out.println("exit-status: " + channel.getExitStatus());
break;
}
try {
Thread.sleep(1000);
} catch (Exception ee) {
}
}
channel.disconnect();
session.disconnect();
请注意:从不在任何生产就绪代码中使用while(true)
,这只是...错误的代码,无论多少例外,它都会在某些时候中断/生成死锁你抓住了,无论你多久插入break
等语句,它都会发生。
所以你需要做的就是在你的脚本文件之后立即放置你的参数,这应该是关于它的 - 但这只适用于命令行参数,AFAIK在脚本运行时很容易输入参数 - read
将不适合你,因为你的剧本显然不是本地的。您无法使用需要本地输入的脚本,您需要切换到命令行参数 - 即$1
,$2
等。
下面是MyUserInfo
:*click