Как Java выполняет команды терминала? - PullRequest
2 голосов
/ 26 мая 2011

Нашел, что это сложно; Имея следующий код:

String cmd = "find /home/folder/ -type f"; 
Runtime run = Runtime.getRuntime() ; 
Process pr = run.exec(cmd); 
pr.waitFor();

Я pr.getInputStream() и получу правильный результат find, нет проблем. Однако, если я хочу быть более конкретным, и моя команда будет cmd = "find /home/folder/ -type f -name somefile*";, поток ввода будет пустым.

Теперь я подумал, что это будет что-то, связанное с расширениями строк, выполняемыми интерактивной оболочкой (я полагаю, что она не будет использоваться в этом случае). В этом случае * не будет иметь смысла, а find будет искать файлы, которые действительно называются "*" (что-то вроде \*). Поэтому я попытался указать мою команду как sh -c "find /home/folder/ -type f -name somefile*". Но это тоже не сработало ...

Что мне не хватает?

спасибо,

е.

Ps .: Это AIX box с Java JVM от IBM.

Ответы [ 2 ]

1 голос
/ 26 мая 2011

Я всегда экранирую подстановочный знак при использовании find:

cmd = "find /home/folder/ -type f -name somefile\\*";
0 голосов
/ 26 мая 2011

Я думаю, что было бы лучше, если бы вы использовали методы ProcessBuilder или, возможно, Runtime.exec, поскольку они не нуждаются в экранировании оболочки и не запускаются через нее.

  • ProcessBuilder , более гибкая загрузка
  • Runtime.exec , отличается от формы, которая принимает только строку
...