如何使用java将输入值传递给shell脚本

时间:2015-09-16 09:51:48

标签: java jsch

我创建了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

1 个答案:

答案 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

的界面