我正在使用此教程中给出的命令
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

请建议正确的命令运行而不回显。

最佳答案

由于您的参数包含空格,因此您不能依赖内置的标记化。为避免这种情况,请使用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);

关于java - 如何编写没有回声串联的特定命令?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13796760/

10-09 21:02