2015-12-14 1 views
0

Я использую apache-commons-exec для выполнения некоторых команд в приложении Java.Выполнять несколько команд apache-commons-exec с точкой с запятой

Когда я выполняю 'ls -la/home/user', он отлично работает.

Но мне нужно выполнить что-то вроде этого

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

вхожу команду в объект CommandLine и он не работает.

Он возвращает пустую строку и -559038737 код выхода.

Поскольку природа среды и сценариев (первые из них задают некоторые необходимые переменные среды); я не могу поместить весь вызов в скрипт o Я пробовал много решений (например, объединить всю команду с кавычками типа «» или использовать входной поток PumStreamHandlet), но ничего не работает до сих пор ...

У кого-нибудь есть идея?

ответ

0

попробовать

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

В вашей команде

Две вещи я предполагаю, что вам нужно здесь.

Прежде всего, если вы настраиваете переменные окружения, которые, вероятно, вам необходимо использовать. Во-вторых вы хотите запустить оболочку и получить оболочку EXEC сценарии оболочки, а затем выполнить следующую команду, все в том же контексте

+0

Хорошо, я проверяю это .... – user898384

+0

Это сработало для вас? можете ли вы обновить ответ, если это так? Вы также можете попробовать объединить команды, используя && –

-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 

Интересный факт: в окнах это работает нормально!

 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 + "\""); 

Я полностью из вариантов сейчас !!!

+0

Привет! Добро пожаловать в StackOverflow, убедитесь, что, когда вы отвечаете на вопрос, вы на самом деле отвечаете на него. StackOverflow отличается от форума: http://stackoverflow.com/help/how-to-answer –

-1

Я получил workarround: создать временную файл ш команды, положив хижину на флиртует линии и выдачей разрешений, выполнение этого файла в одной командной строке, получить результат и выхода, для последнего удаления временного файла ...

и он работает!