0
我有一个C++程序中,我想执行以下命令的命令:当我想执行这个命令执行使用POPEN
cmd = "(diff <(perl -ne 's/^\\S+\\s//; if ((/aaa/ .. /bbb/) && /ccc/)"
" { print \"$_\"}' file1)"
"<(perl -ne 's/^\\S+\\s//; if ((/aaa/ .. /bbb/) && /ccc/)"
" { print \"$_\"} file2)) ";
我得到这个错误:
Search pattern not terminated at -e line 1.
我注意到以下命令是这样工作的:
cmd = "diff <(echo aa) <(echo bb)"
string strCall = "bash -c \"(" + cmd + ") 2>&1\"";
stream = popen(strCall.c_str(),"r"); // doesn't work popen(**str**.c_str(),"r")
和一个包含'''的示例perl命令的工作方式类似于S:
cmd = "perl -ne '{print \"$1\"}' file"
stream = popen(str.c_str(),"r"); // doesn't work popen(**strCall**.c_str(),"r");
但如果perl的命令不包含'“,它是双向的:
cmd = "perl -ne '{print $1}' file"
string strCall = "bash -c \"(" + cmd + ") 2>&1\"";
stream = popen(str.c_str(),"r"); // also works popen(**strCall**.c_str(),"r");
我怎样才能做到在同一个命令同时使用DIFF和Perl。我假设我必须使用strCall。 我试过也逃脱perl的CMD这样,但它不工作:
cmd = "perl -ne '{print \\\"$1\\\"}' file" // one '/' for '/', one for "'" and one for '"'.
而且它不工作这一点,但我却不能使用R(“STR”) :
cmd = R"(perl -ne '{print \"$1\"}' file)"
string strCall = "bash -c \"(" + cmd + ") 2>&1\"";
stream = popen(strCall.c_str(),"r")
谢谢。
不确定它是否是转位错误,但看起来您可能会错过第二个perl子shell中的结束单引号。我假设你在命令行上有这个工作? – codnodder
在cmd中工作。这是一个转位错误。 –