[英]Unable to run UNIX command from Java program
我正在嘗試創建一個Java程序,該程序接受一些用戶輸入的變量並將其傳遞給perl腳本(它實際上在perl腳本中找到了某個字符串,並用用戶輸入的變量替換了它)。 這是代碼:
String sedMain = "sed -e ";
String sedFirstLine = "'s/AAA/"+newFirstLine+"/' -e ";
String sedNewCntr = "'s/BBB/"+newCntr+"/' -e ";
String sedNewSpacing = "'s/SPACE/"+newSpacing+"/' -e ";
String sedNewDmax = "'s/MAX/"+newDmax+"/'";
String sedFile = " /filepath/myperlscript.pl > /filepath/myNEWperlscript.pl";
String sedCommand=sedMain+sedFirstLine+sedNewCntr+sedNewSpacing+sedNewDmax+sedFile;
System.out.println("SED COMMAND: "+sedCommand);
String testRun = "touch /filepath/hello.txt";
Process runSedCommand;
runSedCommand = Runtime.getRuntime().exec(sedCommand);
我正在使用IDE,並且在將sed命令打印到控制台時,它看起來是正確的。 我從控制台復制了sed命令,並從終端運行了它,然后它起作用了。 我編寫了字符串“ testRun”以查看Java中的Process是否存在問題,並創建了文件“ hello.txt”。 但是由於某種原因,我的程序未創建輸出perl文件“ myNEWperlscript.pl”。 我很困惑為什么這不起作用。 有人可以幫忙嗎?
exec()以程序名稱和參數為參數的String []作為元素,但是您將所有內容串聯在一起成為單個String,因此有效地失去了參數。
嘗試這樣的事情:
String[] cmd = {"sed", "first argument", "second argument"};
Runtime.getRuntime().exec(cmd);
使用
exec(String[] cmdarray)
簽名。 sed命令,-e是參數,'s / AAA / \\ n /'是另一個參數,依此類推。 所以你會有
String[] command = new String[] {"sed", "-e", "s/AAA/\n/", "next parameter without single quotes", , "next parameter without quotes..."}
Runtime.getRuntime.exec(command);
這是您的參數在到達shell時將被正確格式化的唯一方法,否則,可能會發生怪異的工作,因為字符串的第一個標記之后的任何引號都將被視為只是一個參數,因此可以轉義引號,諸如此類那
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.