导航

exec

执行脚本程序的时候遇见两个问题

1.执行脚本start.sh

大家的写法应该都是

char *argv[] = {NULL};
execv("/root/Projects/wind/start.sh", argv);

脑抽的写法是

char *argv[] = {"/root/Projects/wind/start.sh", NULL};
execv("/bin/sh", argv);

后者是永远不会结束,而且进入到shell界面。

2.因为执行的脚本里还会执行其目录下的脚本,所以用到execve,设置环境变量

我的做法是

char *envv[2] = {"PWD=/root/Projects/wind", NULL};
char *argv[] = {NULL};

execve("/root/Projects/wind/start.sh", argv, envv);

在start.sh输出环境变量时,PWD不生效(HOME就可以)

我百度到的解决方案[最近运气是真的好]

https://hant-kb.kaifa99.com/others/post_12697618

char *argv[] = {NULL};

chdir("/root/Projects/wind"); 
execv("/root/Projects/wind/start.sh", argv);

case closed.

posted on 2021-04-19 16:42  toughcactus  阅读(93)  评论(0编辑  收藏  举报