【问题标题】:How to execute bash commands in Java (Raspberry pi)如何在 Java (Raspberry pi) 中执行 bash 命令
【发布时间】:2021-09-28 19:28:49
【问题描述】:

我不知道为什么,但我只能在我的 Raspberry 3B 上通过代码执行一小部分命令(我什至可以执行 echo)。出于某种原因,您通常可以在终端本身执行的 99% 的命令,您无法通过代码执行。

示例:我执行这个 java 代码: Runtime.getRuntime().exec("echo hi");

我明白了: `java.io.IOException: Cannot run program "echo hi": error=2, No such file or directory

是否存在我无法在 java 代码中访问的 PATH 配置?为什么我不能从代码中对树莓派执行任何命令?

【问题讨论】:

  • echo 是一个内置的 shell。所以命令应该是/bin/bash -c "echo hi"。我会为命令使用一个数组,并准备好读取标准输入和标准错误,最好是在专用线程中
  • 尝试向您的 ide 询问您正在使用的 exec 的 javadoc。它可能需要一个单词数组,而不是命令字符串。
  • @g00se - 虽然 echo 是一个内置的 shell,但也有一个 /bin/echo (包括我刚刚看到的随机 Raspberry Pi Zero)。
  • 如果存在,它可能不在 $PATH 中。显然不是,因为无法识别命令
  • 我刚刚在我的 Pi 上写了一个快速的 Java 测试(它有股票 Raspbian 非 GUI 图像)。对我有用,因为我没有任何异常并且进程以 0 退出。但没有看到回显输出。

标签: java bash raspberry-pi


【解决方案1】:

我编写了一些使用exec() 调用的示例。在 Java 中还有其他方法可以启动进程(ProcessBuilder 是这里的关键字),但是这个例子比较容易理解:

import java.util.*;
import java.io.*;
import java.text.*;

public class X {

    public static void main(String argv[])
    {
        String args[] = { "/bin/bash", "-c", "uptime" };
        try {
            Process p = Runtime.getRuntime().exec(args);
            BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));
            String line = in.readLine();
            while (line != null) {
                System.out.println("Found: " + line);
                line = in.readLine();
            }
        } catch (Exception e) {
            System.err.println("Some error occured : " + e.toString());
        }
    }

}

基本上程序执行命令行/bin/bash -c uptime;只是一个uptime 会做同样的事情,但我想展示如何使用命令行参数来启动程序。

【讨论】:

    猜你喜欢
    • 2014-10-30
    • 1970-01-01
    • 2015-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-14
    • 1970-01-01
    • 2017-05-03
    相关资源
    最近更新 更多