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