import com.yegor256.Jaxec;
String stdout = new Jaxec("shell", "command")
.withHome("/home/me") // run it in this directory
.withRedirect(false) // don't redirect STDERR to STDOUT
.withCheck(false) // ignore the exit code (no exception if it's not zero)
.exec();
4条答案
按热度按时间rdrgkggo1#
exec不执行shell中的命令
尝试
而不是.
编辑:我的系统上没有csh,所以我用bash代替。以下为我工作
20jt8wwn2#
使用ProcessBuilder分隔命令和参数,而不是空格。无论使用什么shell,这都应该起作用:
aydmsdu93#
基于@Tim的例子来创建一个自包含的方法:
(The测试示例是command that lists all files in a directory and its subdirectories, recursively, in chronological order。)
顺便说一句,如果有人能告诉我,为什么我需要4和8个反斜杠,而不是2和4,我可以学到一些东西。还有一个层次的无法逃脱的发生比我计数。
编辑:刚刚在Linux上尝试了同样的代码,结果发现我需要在test命令中使用一半的反斜杠!(也就是:2和4的期望值。)现在它不再只是奇怪,而是一个可移植性问题。
nqwrtyyt4#
你也可以使用我的小库jaxec:
在这里,
Jaxec
不仅会执行shell命令,还会将其输出发送到Slf4j log,等待其完成,将stderr重定向到stdout,并确保在退出代码不等于零时引发异常。显然,在幕后Jaxec
使用Runtime
。