我正在用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)
答案 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