0

我正在使用 apache-commons-exec 在 Java 应用程序中执行一些命令。

当我执行 'ls -la /home/user' 时效果很好。

但我需要执行这样的事情

./setEnvsOfTypeXXX.sh; ./setEnvsOfTypeYYY.sh; ls -la /home/user

我将命令输入到 CommandLine 对象中,但它不起作用。

它返回一个空字符串和 -559038737 退出代码。

因为环境和脚本的性质(第一个设置了一些需要的环境变量);我无法将所有调用放入脚本中,我尝试了许多解决方案(例如用引号将所有命令括起来,如“'”或使用 PumStreamHandlet 输入流),但到目前为止没有任何效果......

有人有想法吗?

4

3 回答 3

1

尝试

sh -c '. ./setEnvsOfTypeXXX.sh; . ./setEnvsOfTypeYYY.sh; ls -la /home/user'

作为你的命令

我猜你需要两件事。

首先,如果您要设置环境变量,您可能需要使用 . 其次,您想运行一个 shell 并让 shell 执行 shell 脚本,然后运行以下命令,所有这些都在相同的上下文中

于 2015-12-14T13:31:37.333 回答
-1

我有一个解决方法:使用命令创建一个临时 sh 文件,将 shebang 放在第一行并授予权限,在一个命令行中执行此文件,获取结果和输出,最后删除临时文件...

它有效!

于 2015-12-14T19:38:08.837 回答
-1

我试过这段代码

cmdLine = new CommandLine("/bin/bash");
cmdLine.addArgument("-c");
cmdLine.addArgument(new StringBuilder().append("'").append(command).append("'").toString());

即使有command = "ls";

有错误

bash: ls: No such file or directory

有趣的事实:在 Windows 中这可以正常工作!

        cmdLine = new CommandLine("cmd.exe");
        cmdLine.addArgument("/c");
        cmdLine.addArgument(new StringBuilder().append("\"").append(command).append("\"").toString());
        logger.info("Command win line: cmd.exe /c \""+command + "\"");

我现在完全没有选择了!!!

于 2015-12-14T17:25:21.910 回答