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 这样的简单命令可以正常工作。

我尝试了这些东西,但它们都不起作用..

/home/saj/g2p/mosesdecoder-master/bin/moses -f /home/saj/g2p/working/binarised-model/moses.ini 'TWONEIGH T'

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

/home/saj/g2p/mosesdecoder-master/bin/moses 'TWONEIGH T' -f /home/saj/g2p/working/binarised-model/moses.ini

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

请建议正确的命令以在没有回声的情况下运行。

4

1 回答 1

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);

此外,关于管道和重定向,请注意这些是由外壳处理的。为了echo '/home/saj/' | ls从 Java 中运行命令行,您应该执行一个 shell 并将其作为参数传递给 shell;例如:

String args[] = new String[] { "/bin/sh", "-c", "echo '/home/saj/' | ls" };
Process p = r.exec(args);
于 2012-12-10T07:57:39.337 回答