从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编译)可以正常工作。
答案 0 :(得分:2)
'>'和'|'运算符是shell的功能。
从这里到最简单的路由是将整个命令字符串作为shell命令执行。即std::system("cygwin/bin/bash -c \"command_string...\"")
只是为了澄清:在进行“系统”调用时将使用默认命令shell。在Linux系统中,这将是“bash”。在Windows中,它将是“cmd”(这不是你想要的那个)