system()返回错误语法错误:"("意外

时间:2018-01-03 11:51:08

标签: c++ linux bash shell system

我想在我的C ++代码中使用system()API使用一个命令。

命令是:

comm -23 <(apt-mark showmanual | sort -u) <(gzip -dc /var/log/installer/initial-status.gz | sed -n 's/^Package: //p' | sort -u)

有关该命令的更多详细信息,请使用this link

当我在Ubuntu 64位计算机上使用终端时,此命令可以正常工作,但是当我在C ++代码中使用系统(&#34;以上命令&#34;) API时,它显示错误,它们在下面:

  

sh:1:语法错误:&#34;(&#34;意外

我在Google上搜索并找到一个解决方案( C system function causes error 'sh: Syntax error: “(” unexpected ' ),但接受的解决方案以另一种方式执行任务。它不是解决方案,其他解决方案无效。

每个人都解释了如何在shell脚本(.sh文件)中删除此错误,因为所有解决方案都可以在.sh上运行,但它们不适用于system()API。我无法在C ++代码system()API中找到如何删除此错误。

2 个答案:

答案 0 :(得分:0)

如前所述,用<(...)进行进程替换是Bash功能,在香草sh中不可用。因此,您需要显式调用Bash shell:

bash -c "comm -23 <(apt-mark showmanual | sort -u) <(gzip -dc /var/log/installer/initial-status.gz | sed -n 's/^Package: //p' | sort -u)"

答案 1 :(得分:-1)

只需尝试:

system("bash comm -23 <(apt-mark showmanual | sort -u) <(gzip -dc /var/log/installer/initial-status.gz | sed -n 's/^Package: //p' | sort -u)");