【发布时间】:2018-01-03 11:51:08
【问题描述】:
我想在我的 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++ 代码中的 system("above command") API 中使用时,它显示错误,它们在下面:
sh: 1: 语法错误:"(" 意外
我在 Google 上搜索并找到一个解决方案 (C system function causes error 'sh: Syntax error: “(” unexpected '),但接受的解决方案以另一种方式完成任务。这不是一个解决方案,其他解决方案也不起作用。
每个人都解释了如何在 shell 脚本(.sh 文件)中删除此错误,因为所有解决方案都可能适用于 .sh,但它们不适用于 system() API。我无法在 C++ 代码 system() API 中找到如何消除此错误。
【问题讨论】:
-
如果您明确尝试使用该命令运行
bash会怎样?命令sh可能不是 Bash,或者可能是没有 Bash 扩展的 Bash? -
从我看到你的命令使用进程替换语法
comm <(),这是bash的一个特性,而不是sh。 -
@Someprogrammerdude 我在 ubuntu 中打开终端并运行“comm -23
-
同样
sh不是bash。而bash不是sh。 shellsh可能是一个最小的 shell,它甚至可能不支持所有 POSIX 功能。bashshell 是一个非常大且复杂的 shell,带有许多非标准扩展。如果你依赖这些扩展(我猜<(...)是),那么你就不能使用普通的shellsh。要么你必须修改命令,使sh可以运行它,或者显式使用bash(如bash -c "...") -
另请注意,拥有
system("sudo ...")是一个像谷仓一侧一样大的安全性,只是等待发生。
标签: c++ linux bash shell system