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

时间:2015-11-02 02:22:02

标签: c bash printf system

好的,所以我用谷歌搜索了一个小时或更长时间,但我仍然没有解决我的问题。

我有这3个bash命令:

  1. find . -name "file_name" -exec du -h {} \; - >给我文件的大小
  2. ls -l --time-style='+%d/%m/%Y' "file_name" | awk '{print $6}' - >最后修改日期
  3. ls -l "file_name"|cut -d" " -f1 - >文件的权限
  4. 我想使用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 $6}' &&
            ls -l %s | cut -d' ' -f1",
            file_name,file_name,file_name);
    system((char*)command);
    

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

    编译错误:'Sh:&&不期望'

1 个答案:

答案 0 :(得分:1)

您需要在命令中的每个百分号前添加百分号,否则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 $6}' && "
            "ls -l %s | cut -d' ' -f1",
            file_name,
            file_name,
            file_name);
    printf("command: -->%s<--\n\n\n", command);
    system((char*)command);
}