groovy - 如何从流程构建器字符串参数中排除 $,以执行 shell 命令
问题描述
我试图在执行 echo $! 时转义“$”符号!java中的命令。
static def execSync(String command) throws Exception {
log.info("exec(" + command + ")")
String[] splited = command.split("\\s+")
def listCommand = Arrays.asList(splited)
ProcessBuilder processBuilder = new ProcessBuilder()
processBuilder.command(listCommand)
return processBuilder.start()
}
execSync("echo \$!") // returns $! when i'd like a pid
我已经确定问题出在执行的命令中(即:上面的代码),而不是我获取命令标准输出的方式(输出流 blabla)。如果你绝对确定不是,我会展示更多。
当我在我的系统(centOs 7)上执行“echo $!” 我显然得到了一个 pid,例如:2626。
我最想知道是否有办法做一个“回声$!” 就像在我的函数中带有字符串的系统上一样?(正则表达式或其他东西)
否则,ProcessBuilder.start 返回一个 Process 但似乎没有获取 pid 的方法,只有 exitReturn、out/in/error 流...由于我使用上面显示的方法执行了上一个命令,我虽然可以使用 linux 命令获取 pid。
那么,有没有办法获取上一个进程的pid?(不是我真正想要的,但如果没有其他办法,我可以管理)
当 java 9 有一个方法“getPid”时,我被 java 8 困住了
解决方案
如果你.execute()
还是ProcessBuilder
直接使用,就不能直接使用shell功能。它只允许产生带有参数的进程。您必须启动一个外壳并使其执行您的外壳“脚本”(命令)。例如
def listCommand = ["/bin/sh", "-c", command]
推荐阅读
- hadoop - 如何在mapreduce.Job中找到失败的日志
- python - 将列表拆分为行
- android - 用户无法在 Play 商店中评价/评论我的应用程序
- javascript - 如何根据用户输入过滤 Angular 视图中的数据?
- python - 在 Paraview 的自定义过滤器中导入日志记录
- django - 无法在 Windows 10 中运行 Django
- python-3.7 - asyncpg.exceptions.DataError:查询参数的输入无效
- java - 我正在尝试连接到远程服务器上的服务并且无法使其工作
- java - 从 MySQL 检索到的 TemporalType.TIMESTAMP 错误
- dax - 创建一个 Dax 度量以获取平均值