我有代码段:
public static void getOS() throws IOException, InterruptedException
{
String[] cmd = {"cat", "/etc/*-release"};
Process proc = rt.exec(cmd);
VerboseMode.verboseOut(cmd,proc);
BufferedReader is = new BufferedReader(new InputStreamReader(proc.getInputStream()));
line = is.readLine();
OS = line.trim();
}
在一个曾经可以工作但由于某种原因停止的程序中。如果我cat /etc/*-release
从终端运行我会得到结果,但从 java 我会得到空值。什么不见了?
解决它。
我删除了将输出定向到控制台而不是行变量的详细模式行,并更改了 cmd 字符串的格式:
public static void getOS() throws IOException, InterruptedException
{
String[] cmd = {"/bin/sh","-c","cat /etc/*-release" };
Process proc = rt.exec(cmd);
BufferedReader is = new BufferedReader(new InputStreamReader(proc.getInputStream()));
line = is.readLine();
OS = line.trim();
}
我一定是改了然后忘记了。但是对于我自己的信息,上面显示的两个 cmd 字符串之间的区别是什么,以及我是否将它作为字符串与字符串 [] 传递。据我了解,字符串可能并不总是有效,但 string[] 会。但是 /bin/sh -c 部分我不确定,之前在其他 SO 线程中在线看到过。