2013-10-29 83 views
-2

我想从Java程序运行linux脚本,并且只在脚本停止时继续执行程序。我不感兴趣阅读脚本输出...任何人都可以帮助我吗? 非常感谢, 和原谅我的英语不好如何从Java运行linux脚本

+0

那么你有什么尝试?你卡在哪里? –

+1

你需要一个过程。 请参阅[如何使用Java执行系统命令(linux/bsd)](http://stackoverflow.com/a/792049/416300) – summerbulb

+1

请参阅http://stackoverflow.com/questions/18545921/run-linux -script-from-java/18546394#18546394 – A4L

回答

2

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

// 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(...),而应该手动构建并启动过程。请阅读Process javadocProcessBuilder javadoc关于如何设置并启动它。

+0

这只会工作如果脚本没有(或很少)输出。否则它会阻塞并等待某些内容读取该输出。 –

+0

OP的q似乎是一个非常简单的...我假设,我承认,所以我已经编辑过,添加引用来寻找更复杂情况的更多信息。 – rolfl

+0

对不起形成的问题,我真正的问题是,我可以执行我的脚本之前,我必须去特定的目录。如果我的脚本路径是/ quota_users/home/Hier_CarryReverse/syn/runme首先我必须执行cd/quota_users/home/Hier_CarryReverse/syn /然后./runme。我没有成功使用rolfl示例我有一个错误,说不能运行程序“cd/quota_users/home/Hier_CarryReverse/syn”:java.io.IOException:error = 2,没有这样的文件或目录 – s0ld13r

1

您也可以启动bash的解释,而不是

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

这可能在一些通常破情况下工作时@rolfl解决方案可能无法正常工作(非可执行的脚本文件,#!/头丢失等)