我正在使用apache-commons-exec在Java应用程序中执行一些命令。
当我执行'ls -la /home/user‘时,它工作得很好。
但是我需要执行下面这样的代码
./setEnvsOfTypeXXX.sh; ./setEnvsOfTypeYYY.sh; ls -la /home/user我在CommandLine对象中输入该命令,但它不起作用。
它返回一个空字符串和-559038737退出代码。
因为环境和脚本的性质(第一个设置了一些需要的环境变量);我不能将所有的调用放在一个脚本中,或者我尝试了许多解决方案(比如用引号将所有命令括起来,比如"'“,或者使用PumStreamHandlet输入流),但到目前为止都没有起作用……
有谁有主意吗?
发布于 2015-12-14 21:31:37
试一试
sh -c '. ./setEnvsOfTypeXXX.sh; . ./setEnvsOfTypeYYY.sh; ls -la /home/user'作为你的命令
我猜你这里需要两样东西。
首先,如果您正在设置环境变量,则可能需要使用。其次,您希望运行一个shell并让shell执行shell脚本,然后在相同的上下文中运行以下命令
发布于 2015-12-15 01:25:22
我试过这段代码
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-15 03:38:09
我得到了一个变通方法:使用以下命令创建一个临时sh文件,将shebang放在第一行并授予权限,在一个命令行中执行此文件,获得结果并输出,最后删除临时文件...
而且它起作用了!
https://stackoverflow.com/questions/34267989
复制相似问题