如何在 system() 中执行多个命令,也使用变量

How to execute multiple commands in system() , also using a variable

好的,我已经用谷歌搜索了一个多小时,但仍然没有解决我的问题。

我有这 3 个 bash 命令:

  1. find . -name "file_name" -exec du -h {} \; -> 给我文件的大小
  2. ls -l --time-style='+%d/%m/%Y' "file_name" | awk '{print }' -> 最后修改日期
  3. ls -l "file_name"|cut -d" " -f1 -> 文件权限

我想使用 system();

一次执行这 3 个命令
Output example :

文件大小:...

最后修改日期:...

文件权限:...

我的尝试:

char command[256];
char file_name[]={"myfile.txt"};
sprintf(command,"find . -name %s -exec du -h {} \; &&
        ls -l --time-style='+%D/%m/%Y' %s | awk '{print }' &&
        ls -l %s | cut -d' ' -f1",
        file_name,file_name,file_name);
system((char*)command);

注意:我不必担心文件的路径,因为我使用的文件来自执行我的 c 程序的同一目录。

编译错误:'Sh: && is not expected'

您需要在命令中的每个百分号前添加一个百分号,否则它会被 sprintf 解释为打印掩码引入器。此外,您需要在命令中的每个反斜杠前添加一个反斜杠,否则 sprintf 会将其解释为介绍符(例如 \n 等)。此外,我修改了 sprintf 第二个参数(即字符串)...我在代码中每个物理行的末尾和代码中下一个物理行的开头放置了结束引号。

下面是一个示例,可能正是您要查找的内容(至少它可以编译并运行):

#include <stdio.h>

int main(int argc, char **argv)
{

    char command[256];
    char file_name[] = "myfile.txt";


    sprintf(command, "find . -name %s -exec du -h {} \; && "
            "ls -l --time-style='+%%D/%%m/%%Y' %s | awk '{print }' && "
            "ls -l %s | cut -d' ' -f1",
            file_name,
            file_name,
            file_name);
    printf("command: -->%s<--\n\n\n", command);
    system((char*)command);
}