从std :: system调用执行时,awk的输出重定向失败

时间:2015-08-11 22:14:05

标签: c++ linux windows bash awk

从C ++程序运行此命令时:

std::system("p4 print //perforce/path/to/file/configurations.json | grep -m 1 Configuration | awk '{sub(/,/, \"\"); sub(/\"/, \"\"); print $2}' > output.txt");

在调用awk之前,该命令似乎正常工作,使用grep命令输出预期的字符串,但awk命令失败并显示以下错误消息:

awk: cmd. line:1: fatal: cannot open file '>' for reading (No such file or directory)

awk似乎将输出重定向运算符解释为输入文件的名称。

出于某种原因,在Cygwin下的Windows上执行时会发生此错误,但在Linux上执行时(分别使用MSVC 12和gcc / 4.8.1编译)可以正常工作。

1 个答案:

答案 0 :(得分:2)

'>'和'|'运算符是shell的功能。

从这里到最简单的路由是将整个命令字符串作为shell命令执行。即std::system("cygwin/bin/bash -c \"command_string...\"")

只是为了澄清:在进行“系统”调用时将使用默认命令shell。在Linux系统中,这将是“bash”。在Windows中,它将是“cmd”(这不是你想要的那个)