用 execv 执行 shell 程序

Execute shell program with execv

我正在用 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  +  + 

当我 运行 程序 ./main prog.sh 1 2 3 我得到一个错误是

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

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

看看你的论点:

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