我可以Runtime.exec()
用来执行诸如“ getprop
”和“ ls system
”之类的shell命令,它们可以正常工作。
但是,当我使用“ echo $BOOTCLASSPATH
”,“ echo \\$BOOTCLASSPATH
”或“ echo HelloWorld
”时,它不会在标准输出中显示。
日志显示:
I/AndroidRuntime( 4453): VM exiting with result code -1.
这是我的代码:
try {
java.lang.Process proc = Runtime.getRuntime().exec("echo -e \\$BOOTCLASSPATH");
String line = null;
InputStream stderr = proc.getErrorStream();
InputStreamReader esr = new InputStreamReader (stderr);
BufferedReader ebr = new BufferedReader (esr);
while ( (line = ebr.readLine()) != null )
Log.e("FXN-BOOTCLASSPATH", line);
InputStream stdout = proc.getInputStream();
InputStreamReader osr = new InputStreamReader (stdout);
BufferedReader obr = new BufferedReader (osr);
while ( (line = obr.readLine()) != null )
Log.i("FXN-BOOTCLASSPATH", line);
int exitVal = proc.waitFor();
Log.d("FXN-BOOTCLASSPATH", "getprop exitValue: " + exitVal);
} catch (Exception e) {
e.printStackTrace();
}
@Adi Tiwari,我找到了原因。 Runtime.getRuntime.exec()
不直接执行Shell命令,而是执行带有参数的可执行文件。“
echo
”是内置的shell命令。它实际上是sh
带有option
的可执行文件参数的一部分-c
。像这样ls
的命令是实际的可执行文件。您可以使用type echo
和进行type ls
命令adb shell
以查看不同之处。
所以最终的代码是:
String[] cmdline = { "sh", "-c", "echo $BOOTCLASSPATH" };
Runtime.getRuntime().exec(cmdline);
我没有得到“你好”:请想知道为什么和做什么
问题内容: 我正在寻找在Go中执行shell命令,并在程序中以字符串形式获取结果输出。我看到了Rosetta Code 版本: 但这并不能以我可以通过编程方式访问的方式捕获实际的标准或错误-那些仍会打印到常规的stdout / stderr。我看到使用Pipe作为out或err可以在其他地方提供帮助,但是没有如何执行此操作的示例。有任何想法吗? 问题答案: 该答案不代表Go标准库的当前状态。请查看
问题内容: 我仍在尝试掌握如何运行linux或Windows shell命令并在node.js中捕获输出的细节。最终,我想做这样的事情… 重要的一点是必须对全局范围的变量(或对象)可用。我尝试了以下功能,但是由于某种原因,我被打印到控制台了。 我很难理解代码在哪里突破了…该模型的非常简单的原型可以工作… 有人可以帮助我了解为什么有效,但是无效吗?FWIW,我需要使用,因为缓冲区限制为200KB。
有一个叫做“袖扣”的程序,运行方式如下: 本程序以1个文件作为输入,在“output-dir”中生成4个文件作为输出。 多谢了。
我有一个案例,我想问我可以解决与Spring壳。我有一个Main.jar应用程序,它有几个部署在Wildly服务器上的Spring任务。在我的例子中,我不能停止或重新部署main.jar,因为必须不停地提供服务。
我正在使用Visual Studio Code,但我无法运行“在路径中安装代码命令”选项,因为当我键入Shift Ctrl P时,此命令不会出现。我正在使用Windows 10和最新版本的Visual Studio Code。 我尝试了许多步骤来解决我的问题,但没有成功。以下是我所做的: 重新安装了Visual Studio Code(最新版本),并检查了要添加到PATH变量的选项。不起作用。 打