当前位置: 首页 > 知识库问答 >
问题:

在Android上使用Jsch(Exec)时特定unix命令出现问题

贺山
2023-03-14

你好,我做了几天的研究和一些问题分析,但我现在不知道如何解决我的问题。

也许有人能帮忙......

我正在使用Android设备的Jsch来访问我的raspberry pi,以便设置一些特定的命令。

我从jschshell命令开始,除了由于无限循环而无法关闭连接之外,一切都很好。

我试图切换到Exec,尤其是因为我只想发送几个命令,而不需要知道shell上发生了什么。

不管怎样...这是我的代码:目的是向我的电视发送一个CEC睡眠信号...

 public c_html" target="_blank">jsch(String userName, String password,
                  String connectionIP, String knownHostsFileName)
{
    JSch jsch = new JSch();
    System.out.println("com.jcraft.jsch BBÄÄÄHHMM");
    try
    {
        Session session = jsch.getSession("pi", "192.168.188.23", 22);
        session.setConfig("StrictHostKeyChecking", "no");
        session.setPassword("raspberry");
        session.connect();

        String command = "/home/pi/.xbmc-current/xbmc-bin/bin/cec-client -s -d 1";
        String command2 = "tx 10 36 \r \n";

        ChannelExec channel = (ChannelExec) session.openChannel("exec");
        channel.setCommand(command);

        channel.setInputStream(null);

        channel.connect();
        InputStream in = channel.getInputStream();
        //NOT YET USEFUL
        OutputStream out = channel.getOutputStream();

        System.out.println("com.jcraft.jsch Unix system connected...");

        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("com.jcraft.jsch Feedback: " + new String(tmp, 0, i));
                // NOT WORKING
                out.write(command2.getBytes());
                out.flush();
                System.out.println("com.jcraft.jsch Command flushed");
            }
            if (channel.isClosed())
            {
                System.out.println("com.jcraft.jsch exit-status: " + channel.getExitStatus());
                break;
            }
            try
            {
                Thread.sleep(1000);
            }
            catch (Exception ee)
            {
            }
        }
        channel.disconnect();
        session.disconnect();
        System.out.println("com.jcraft.jsch exit-status: DONE");
    }
    catch (Exception e)
    {
        System.out.println("com.jcraft.jsch exit-status: " +  e.getMessage());
    }
}

尝试此代码不会抛出错误消息,但会抛出令人失望的退出状态消息:127。这意味着找不到命令。。。。所以我假设shell和exec命令之间有很大的区别。。。有了shell,我就像ssh上的一个符咒。

我希望你能帮助我。

::更新,当我第一次使用管道时|这些管道对于exec来说不够,必须添加Outputstream以便在连接到频道后发送命令,我能够实现向我的电视发送命令。。。非常感谢。

共有1个答案

楚博雅
2023-03-14

我更新了上面的代码,并在要刷新的字符串中添加了/r/n。这实际上是一个悬而未决的问题德凯

 类似资料:
  • 问题内容: 我想知道如何在使用“ less”命令时查看特殊字符。例如,我想查看带有特殊符号的不可打印字符。例如,在“ vi”编辑器中,我使用“ set list on”来查看由美元“ $”字符表示的行终止字符。同样,我想使用“较少”命令来执行此操作。 我提到的Unix手册较少,但无济于事。 问题答案: 较少会查看其环境,以查看是否有一个名为LESS的变量 您可以在〜/ .profile之一(.ba

  • 问题内容: 我正在尝试使用JSch从Android使用SSH在Linux服务器上执行命令。 据我所知,我正在连接到服务器,但是当我尝试检索命令的结果时,却什么也没得到。 连接到服务器: 检索数据: 我在这里想念什么? 问题答案: 在启动命令之后,在返回任何输出之前,您将立即断开连接。 您必须等待“ exec”通道关闭(命令完成后它将关闭)。 有关“ exec”通道的信息, 请参见官方JSch示例。

  • 我正在尝试不带参数地运行“/home/simulations/scripts/getdsuip . sh”命令。 当我在机器上手动运行这个命令时,效果很好!所以这个文件肯定在那里,肯定是可以运行的(755),并且在同一个用户(root)下。我只在一台机器上看到这个问题,它在其他地方也能工作,但我想弄清楚为什么它会失败。 这会导致以下错误: 我还尝试了其他方法来运行它,结果也是同样的错误: 这是我尝

  • 我尝试在java中执行以下步骤 1。ssh到远程机器(使用jsch完成),如下所示。 无法继续下一步 我尝试了以下步骤来实现第3步和第4步。尝试运行时。getRuntime()。执行官(“docker exec

  • 我可以运行常规命令,如rm /home/user/Desktop/file但当我不能运行root命令。 我的目的是配置一个squid服务,运行如下命令:apt get install squid service squid start service 但是这些命令需要超级用户身份验证。 有人知道怎么修吗?谢啦