用execv执行shell程序

时间:2017-04-03 17:11:47

标签: c shell exec

我正在用C语言写一个包含这些行的程序:

void main(int argc, char *argv[]) {
    char* file=argv[1];
    char* arguments[] = { "sh", argv[2], argv[3], argv[4], file, NULL };
    execv("/bin/sh", arguments);  
}

文件为prog.sh,其中包含一个简单的参数:

expr $1 + $2 + $3

当我按./main prog.sh 1 2 3运行程序时,我收到错误

/bin/sh: 0: Can't open 1

虽然我期望输出6(总和为1 2 3)

1 个答案:

答案 0 :(得分:2)

看看你的论点:

char* arguments[] = { "sh", argv[2],argv[3],argv[4],file, NULL };

当您运行./main prog.sh 1 2 3时,您最终会致电:

sh 1 2 3 prog.sh

您应该将脚本作为第一个参数:

char* arguments[] = { "sh", file, argv[2],argv[3],argv[4], NULL };

从而致电

sh prog.sh 1 2 3