我正在使用此教程中给出的此命令 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正常工作。
我尝试了这些东西,但没有一个正在运作..
/ 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'
/ 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
/ home / saj / g2p / mosesdecoder-master / bin / moses'T W O N E I G H T'-f /home/saj/g2p/working/binarised-model/moses.ini
/ home / saj / g2p / mosesdecoder-master / bin / moses T W O N E I G H T -f /home/saj/g2p/working/binarised-model/moses.ini
请建议正确的命令在没有回声的情况下运行。
答案 0 :(得分: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);
另外,关于管道和重定向,请注意这些是由shell处理的。为了从Java运行命令行,例如echo '/home/saj/' | ls
,您应该执行一个shell并将其作为参数传递给shell;例如:
String args[] = new String[] { "/bin/sh", "-c", "echo '/home/saj/' | ls" };
Process p = r.exec(args);