在命令行/脚本中使用bash -c 执行命令时一般会把作为参数的命令部分用单引号或者双引号包起来,特别是在需要加额外参数的情况:
bash -c "ls -l"
但是在使用Linux C函数execv/execl中执行bash -c时,给命令部分加上单/双引号后一直报错提示找不到命令:
#include <stdio.h>
#include <unistd.h>
int main() {
char* const argv[] = {
"/bin/bash",
"-c",
"\"ls -l\"",
NULL
};
execv(argv[0], argv);
return 0;
}
后来试了大半天都不行,最后发现其实不需要特地去加单双引号,argv作为char *数组传入execv时已经将整个命令分隔好了,bash不会将其误认为其他的命令行参数。
#include <stdio.h>
#include <unistd.h>
int main() {
char* const argv[] = {
"/bin/bash",
"-c",
"ls -l,
NULL
};
execv(argv[0], argv);
return 0;
}