C系统函数导致错误 'sh: Syntax error: "("unexpected '

标签 c linux shell system

我在 Linux 上用 C 编写了一个简单的程序来删除目录中的所有文件,除了一个名为 svn 的文件,如下所示:

  1 #include <stdio.h>
  2 
  3 int main()
  4 {
  5     system("rm !(svn)");
  6     return 0;
  7 }

但是当我编译并运行它时,终端显示:sh: Syntax error: "("unexpected

但是,当我直接在终端中键入并运行命令时,所有事情都正确完成。 有什么想法吗?

最佳答案

答案是不要使用system。使用 Linux 系统调用列出目录中的文件并使用 unlink() 删除它们。像这样的东西:

DIR* dirHandle = opendir(dirName);
struct dirent* dirEntry;
while ((dirEntry = readdir(dirHandle)) != NULL)
{
    if (strcmp(dirEntry->d_name, "svn") != 0)
    {
        unlink(dirEntry->d_name);
    }
}

警告:省略所有错误处理,未经编译和测试,readdir 可能会返回 ... 也不需要删除。

关于C系统函数导致错误 'sh: Syntax error: "("unexpected ',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4077209/

相关文章:

python - conda 和 python shell 脚本

linux - 执行csh脚本时如何显示行号?

C 哨兵循环问题

c++ - 为什么 -INT_MIN = INT_MIN 在有符号的二进制补码表示中?

计算两种颜色的 "average"

c++ - 无法编译 LibOTR

linux - 将文本文件中的部分文件名与目录中的文件名进行比较(grep + awk)

android - fastboot 和 adb 不能与 sudo 一起使用

linux - 如何以 dasusr 身份登录?

shell - MongoDB 添加额外的嵌入文档而不是覆盖它