我使用apache-commons-exec在Java应用程序中执行某些命令。
当我执行' ls -la / home / user'它很棒。
但我需要执行类似这样的事情
./setEnvsOfTypeXXX.sh; ./setEnvsOfTypeYYY.sh; ls -la /home/user
我将命令输入CommandLine对象,但它无法正常工作。
返回一个空字符串和-559038737退出代码。
因为环境和脚本的性质(第一次设置了一些所需的环境变量);我无法把所有的电话都放到脚本中o 我已经尝试了很多解决方案(例如用引号括起所有命令,如#34;'"或者使用PumStreamHandlet输入流)但到目前为止没有任何工作......
有人有想法吗?
答案 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行并赋予权限,在一个命令行中执行此文件,获取结果和输出,用于最后删除临时文件...
它有效!