【发布时间】:2016-06-12 03:12:24
【问题描述】:
我想使用 ProcessBuilder 运行此命令:
sort -m -u -T /dir -o output <(zcat big-zipped-file1.gz | sort -u) <(zcat big-zipped-file2.gz | sort -u) <(zcat big-zipped-file3.gz | sort -u)
我尝试了以下方法:
// This doesn't recognise the redirection.
String[] args = new String[] {"sort", "-m", "-u", "-T", "/dir", "-o", "output", "<(zcat big-zipped-file1.gz | sort -u)", "<(zcat big-zipped-file2.gz | sort -u)", "<(zcat big-zipped-file3.gz | sort -u)"};
// This gives:
// /bin/sh: -c: line 0: syntax error near unexpected token `('
String[] args = new String[] {"/bin/sh", "-c", "\"sort -m -u -T /dir -o output <(zcat big-zipped-file1.gz | sort -u) <(zcat big-zipped-file2.gz | sort -u) <(zcat big-zipped-file3.gz | sort -u)\""};
我正在像这样使用args:processBuilder.command(args);
【问题讨论】:
-
更新了我的问题。我想将几个 zcat 命令的输出重定向到排序。
-
ProcessBuilder 不是外壳。要么显式调用 shell,要么自己进行重定向。
-
这不是重复的。这里的问题是不同的。我确实在第二次尝试中明确调用了 shell。
-
首先,删除
sort ...周围的内部引号。其次,我不认为sh理解<(...)语法 - 它更像是bash的东西。 -
你是对的!我在发布问题几个小时后发现了这一点,但由于该问题被标记为重复,因此无法添加答案。
标签: java linux processbuilder