Apache commons exec выполнить команду запуска трубы не удается

Я бы хотел, чтобы Apache Commons-exec запускался:

мерзавец статус | голова -n1 | вырезать -c13-

Однако, кажется, он не может выполнить командную строку и дать ошибку, Есть идеи?

CommandLine cmdLine = CommandLine.parse( "git status | head -n1 | cut -c13-" );
DefaultExecutor executor = new DefaultExecutor();
executor.setWorkingDirectory( file );
executor.execute( cmdLine );

Ошибка:

error: unknown switch `n'
usage: git status [options] [--] <filepattern>...

1 ответ

Решение

CommandLine.parse не создаст оболочку bash для интерпретации вашей трубы.

Как описано в разделе" Как передать строковый аргумент в исполняемый файл, запущенный с помощью Apache Commons Exec? ":

Вы не можете добавить аргумент канала (|) потому что [здесь, в вашем случае] 'git status"Команда не примет это.
Это оболочка (например, bash), которая интерпретирует канал и выполняет специальную обработку при вводе этой командной строки в оболочку.

Вы должны использоватьByteArrayInputStream скормить результат одной команды другой;

Другие вопросы по тегам