c语言 - 为什么我不能使用 execl() 来运行 bash 脚本?



我正在尝试从树莓派上的网站按钮运行 bash 脚本,该脚本位于 home/pi/中。下面的代码片段显示了我当前的解决方案。每当按下网站按钮时,它都会在 c 文件中调用此代码块。

else if(strcmp(argv[1],"SelfTest") == 0)
{
char *command = "/bin/bash";
char name[40];
strcpy(name, "home/pi/SelfTest.sh");
execl(command, command, name, NULL);
return 0;
}

我在Raspberry Pi 3+上运行它,我运行的脚本有777个权限,并且由pi:www-data拥有,如果有帮助的话。

我测试了一下,看看 IF 块是否真的被调用了,只需让它创建一个名为"TEST"的空目录。底部的代码片段显示了我是如何做到这一点的。这似乎没有问题(一旦我按下网站上的按钮,我就会"ls"home/pi/,并且有一个名为"TEST"的新文件夹)。不幸的是,当我运行顶部代码片段(运行 SelfTest.sh)时,脚本没有运行(脚本本身应该将输出记录到带有时间戳的日志文件中,并且按下按钮不会更新时间戳。时间戳仅在我从终端内运行脚本时更新)

else if(strcmp(argv[1],"SelfTest") == 0)
{
char *command = "/bin/mkdir";
char name[40];
strcpy(name, "/home/pi/TEST");
execl(command, command, name, NULL);
return 0;
}

每次我按下网站按钮时应该发生的事情是它应该 SelfTest.sh 运行。我应该能够通过读取日志文件来验证这一点,但是当我按下网站按钮时,它永远不会更新。

如果您需要任何额外的信息,请告诉我!

除非您从/运行它,否则此行在home之前缺少斜杠:

strcpy(name, "home/pi/SelfTest.sh");

而且,execl永远不会回来。您可能需要查找有关fork()exec()模式的信息。

显然我超级笨拙,没有意识到我不需要 bash。我将"char *command = "/bin/bash";"更改为"char *command = "/bin/sh";"脚本按预期运行!

相关内容

  • 没有找到相关文章

最新更新