Есть ли разница между java run.exec команды и выполнения оболочки?
У меня есть программа, которая вызывает команду оболочки. Когда я выполняю команду, используя java run.exec, она не работает, но когда я выполняю команду непосредственно в терминале, она работает как шарм.
ex: pdf2swf "3bbba47.pdf" -T 9 -o "3bbba47.swf" didnt worked
from java program but worked directly executing it in terminal.
Но когда я попытался удалить кавычки из команды
pdf2swf 3bbba47.pdf -T 9 -o 3bbba47.swf
Он отлично работал как в run.exec, так и в терминале.
Почему это так?
Я пробовал и в Mac, и в Ubuntu, и закончил с тем же результатом.
3 ответа
run.exec() не вызывает оболочку. Оболочка анализирует командную строку и эффективно удаляет кавычки, прежде чем передать их в качестве аргументов pdf2swf. Вы можете запускать только "сырые" команды с помощью run.exec().
Вы можете, если хотите, запустить оболочку с помощью run.exec() и заставить ее анализировать вашу команду как команду оболочки. Цитировать будет немного больно, но выполнимо.
Когда вы находитесь в оболочке, символ кавычки интерпретируется до того, как оболочка передаст его JVM.
Когда вы находитесь в run.exec, кавычки считаются частью команды, поэтому JVM считает, что вы запрашиваете ["3bbba47.pdf"] вместо [3bbba47.pdf]
От: http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html?page=1
Runtime.exec() не является командной строкой
Последний подводный камень, который нужно охватить с помощью Runtime.exec(), ошибочно полагает, что exec () принимает любую строку, которую принимает ваша командная строка (или оболочка). Runtime.exec() гораздо более ограничен и не кроссплатформенный. Эта ловушка вызвана тем, что пользователи пытаются использовать метод exec (), чтобы принять одну строку в качестве командной строки. Путаница может быть связана с тем, что команда является именем параметра для метода exec (). Таким образом, программист неправильно связывает команду параметра с чем-либо, что он или она может ввести в командной строке, вместо того, чтобы связывать ее с одной программой и ее аргументами.