用分号

时间:2015-12-14 13:13:09

标签: java apache-commons-exec

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

当我执行' ls -la / home / user'它很棒。

但我需要执行类似这样的事情

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

我将命令输入CommandLine对象,但它无法正常工作。

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

因为环境和脚本的性质(第一次设置了一些所需的环境变量);我无法把所有的电话都放到脚本中o 我已经尝试了很多解决方案(例如用引号括起所有命令,如#34;'"或者使用PumStreamHandlet输入流)但到目前为止没有任何工作......

有人有想法吗?

3 个答案:

答案 0 :(得分:0)

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

作为你的命令

我猜你需要的两件事。

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

答案 1 :(得分:-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 + "\"");

我完全没有选择!!!

答案 2 :(得分:-1)

我得到了一个workarround:使用命令创建一个临时sh文件,将shebang放在firts行并赋予权限,在一个命令行中执行此文件,获取结果和输出,用于最后删除临时文件...

它有效!

相关问题