我正在尝试通过以下代码执行 sh 文件(CentOS 机器顺便说一句)
Runtime.getRuntime().exec("sh " + file.getPath());
我在 Windows 上使用此代码,效果很好
Runtime.getRuntime().exec("cmd /c start " + file.getPath());
是否是因为我在 .sh 文件中使用了 Screen?我还使用 java 命令来启动服务器,所以也许我需要包含这些?
这是sh文件的内容
#!/bin/sh
BINDIR=$(dirname "$(readlink -fn "$0")")
cd "$BINDIR"
screen -S PrivateServer java -Xms2048M -Xmx2048M -jar somejar.jar -o true
我还从关闭 Hook 运行此代码,这可能是问题所在吗?这是因为该软件是游戏服务器,其目的是让用户可以使用重新启动命令或使其自动重新启动,而无需自行设置任何内容。
编辑:我决定将错误输出到文本文件,并发现“必须连接到终端”。有任何想法吗?我认为这是与使用 screen 有关的问题。
最佳答案
既然您确认该文件具有可执行权限,请尝试按如下方式传递参数:
Runtime.getRuntime().exec(new String[]{"/bin/sh" ,"-c", file.getPath()});
所以主要提供sh
的完整路径并使用-c
关于java - 从Java执行sh文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14987214/