2013-06-27 1 views
2

У меня есть строковые переменные, какКак передать строковую переменную в качестве аргумента сценария оболочки?

String var1 = "I am" 
String var2 = "here" 
String cmd = ("sh /path/shell.sh \""+var1+"\" \""+var2); 
Runtime rt = Runtime.getRuntime(); 
rt.exec(cmd); 

Но когда я исполню echo $1 $2 из моего скрипта, я получаю выход как I am. Почему кавычки не работают?

+1

Вы забыли закрытие 'quote (") 'после var2. –

+2

*« от JAVA »* 1) Не нужно включать основной тег в заголовки. 2) Он написан как« Java », а не« JAVA ».) Прочитайте (и внесите) * все * рекомендации [Когда Runtime.exec() не будет] (http://www.javaworld.com/jw-12-2000/jw-1229-traps.html). может решить проблему.Если нет, она должна предоставить больше информации о причине, в которой она потерпела неудачу. Затем проигнорируйте, что она ссылается на 'exec' и создает' Process' с помощью 'ProcessBuilder'. ** Также сломайте' String arg' в 'String [] args' для учета аргументов, которые сами содержат пробелы **. –

ответ

0

Вы хотите, чтобы вызвать команду следующим образом:

Process process = new ProcessBuilder().command("sh", "/path/shell.sh", var1, var2); 
Scanner scan = new Scanner(process.getInputStream()); 
while(scan.hasNextLine()) { 
    //... 
} 
//... 
scan.close(); 
process.destroy(); 

Вы, вероятно, хотите, чтобы обернуть, что в try-catch блоке тоже.