2012-12-10 17 views
1

我使用這個命令在本教程在這裏給出 http://www.statmt.org/moses/?n=Moses.Baseline如何寫這個沒有回聲串聯的命令?

echo 'T W O N E I G H T' | /home/saj/g2p/mosesdecoder-master/bin/moses -f /home/saj/g2p/working/binarised-model/moses.ini 

它工作正常,並正確,但我需要沒有echo命令運行它。因爲我想在JAVA(Eclipse)中運行此命令並且存在串聯問題。即使

 Process p = r.exec("echo '/home/saj/' | ls"); 

也沒有運行。雖然像ls,pwd這樣簡單的命令可以正常工作。

我想這些事情,但他們沒有工作..

/家庭/ SAJ/G2P/mosesdecoder主/斌/摩西-f /家庭/ SAJ/G2P /工作/二元化模型/摩西的.ini 'TWONEIGHT'

/家庭/ SAJ/G2P/mosesdecoder主/斌/摩西-f /home/saj/g2p/working/binarised-model/moses.ini TWONEIGHT

/家/ SAJ/g2p/mosesdecoder-master/bin/moses'TWONEIGHT'-f /home/saj/g2p/working/binarised-model/moses.ini

/home/saj/g2p/mosesdecoder-master/bin/moses請提出正確的命令,不帶回聲運行。

回答

0

由於您的參數包含空格,因此您不能依賴內置標記。爲避免這種情況,請使用exec(String[])而不是exec(String)。例如,對於下面的命令:

/home/saj/g2p/mosesdecoder-master/bin/moses -f \ 
    /home/saj/g2p/working/binarised-model/moses.ini 'T W O N E I G H T' 

你可以這樣做:

String args[] = new String[] { 
    "/home/saj/g2p/mosesdecoder-master/bin/moses", 
    "-f", 
    "/home/saj/g2p/working/binarised-model/moses.ini", 
    "T W O N E I G H T" }; 
Process p = r.exec(args); 

此外,關於管道和重定向,請注意,這些都是由殼處理。爲了從Java運行諸如echo '/home/saj/' | ls的命令行,您應該執行一個shell並將其作爲參數傳遞給shell;例如:

String args[] = new String[] { "/bin/sh", "-c", "echo '/home/saj/' | ls" }; 
Process p = r.exec(args); 
+0

謝謝@Grodriguez第二種方法完美工作。 – saj1919