簡體   English   中英

無法從Java程序運行UNIX命令

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM