如何从Java运行linux脚本

如何从Java运行linux脚本,java,linux,bash,runtime.exec,Java,Linux,Bash,Runtime.exec,我想从Java程序运行linux脚本,并仅在脚本停止时继续执行该程序。我对阅读脚本输出不感兴趣。。。有人能帮我吗? 谢谢, 请原谅我英语不好假设所有其他线程都处于空闲状态: // run the script. Process proc = Runtime.getRuntime().exec("/path/to/myscript"); // wait for the return code. int ecode = proc.waitFor(); 如果您的脚本有更复杂的参数,或者它需要监视ST

我想从Java程序运行linux脚本,并仅在脚本停止时继续执行该程序。我对阅读脚本输出不感兴趣。。。有人能帮我吗? 谢谢,
请原谅我英语不好

假设所有其他线程都处于空闲状态:

// run the script.
Process proc = Runtime.getRuntime().exec("/path/to/myscript");
// wait for the return code.
int ecode = proc.waitFor();

如果您的脚本有更复杂的参数,或者它需要监视STDOUT、STDERR,或者需要其他修改(例如将数据馈送到STDIN,或者更改执行目录、环境变量等),那么您应该执行相同的有效过程,但不要使用
Runtime.exec(…)
您应该手动构建并启动流程。阅读和,了解如何设置并启动它。

您也可以启动bash解释器

Process proc = Runtime.getRuntime().exec("/bin/bash /path/to/myscript");
int ecode = proc.waitFor();

当@rolfl解决方案可能不起作用(不可执行脚本文件、#!/头丢失等)时,这可能在一些通常不起作用的情况下起作用。

那么您尝试了什么?你被困在哪里了?你需要一个过程。请看这里请原谅我的错误形式的问题,我真正的问题是,在我可以执行我的脚本之前,我必须去特定的目录。如果我的脚本路径是/quota\u users/home/Hier\u CarryReverse/syn/runme,我必须先执行cd/quota\u users/home/Hier\u CarryReverse/syn/然后执行/runme。我没有成功使用rolfl示例。我有一个错误,说明无法运行程序“cd/quota\u users/home/Hier\u CarryReverse/syn”:java.io.IOException:error=2,没有这样的文件或目录只有在脚本没有(或很少)输出的情况下才能运行。否则它将阻塞并等待读取该输出。OP的q看起来非常简单。。。。我承认这是一个假设,所以我编辑添加了参考,以查找更复杂案例的更多信息。请原谅我的错误形式的问题,我真正的问题是,在我可以执行脚本之前,我必须去特定的目录。如果我的脚本路径是/quota\u users/home/Hier\u CarryReverse/syn/runme,我必须先执行cd/quota\u users/home/Hier\u CarryReverse/syn/然后执行/runme。我没有成功使用rolfl示例我有一个错误,它说无法运行程序“cd/quota\u users/home/Hier\u CarryReverse/syn”:java.io.IOException:error=2,没有这样的文件或目录请查看processbuilder for processbuilder.directory()@s0ld13r:然后请更新您的问题,而不是将其写在随机答案的注释中。其他人几乎没有机会找到这个更新的需求!