我正在尝试从树莓派上的网站按钮运行 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";"脚本按预期运行!