java - 从Java执行sh文件

标签 java linux sh execute gnu-screen

我正在尝试通过以下代码执行 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/

相关文章:

java - 多个不同数据库环境的连接池

java - 打开一个 shell 并在 java 中与其 I/O 交互

linux - 系统 hacked LD Preload 修改/usr/bin/host

bash - 将数字字符串格式化为日期

java - 更新 Java 类,以便列表可以接受任何类型

java - 实现与 SimpleDateFormat 相等的 DateTimeFormatter Y10K 输出?

java - 公共(public)变量、私有(private)变量和常规变量

linux - 使用 "aws s3"实用程序在 S3 中获取从现在起 1 个月前的文件列表

linux - SED:在同一行的两个模式之间插入一个词/字符串

windows - MSYS shell 保持脚本文件打开,防止修改