我正在尝试从树莓派上的网站按钮运行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拥有,如果有帮助的话。
我测试了是否仅通过创建一个名为“ TEST”的空目录来实际调用了IF块。底部的代码段显示了我是如何实现的。这似乎没有问题(当我按下网站上的按钮时,我就“ 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。我应该能够通过阅读日志文件来验证这一点,但是当我按下网站按钮时,它永远不会更新。
如果您需要任何其他信息,请告诉我!
答案 0 :(得分:1)
除非您从/
运行此行,否则此行在home
之前缺少斜杠:
strcpy(name, "home/pi/SelfTest.sh");
此外,execl
将永远不会返回。您可能想查询有关fork()
和exec()
模式的信息。
答案 1 :(得分:0)
显然我超级笨拙,没有意识到我不需要bash。我更改了'char * command =“ / bin / bash”;'改为'char * command =“ / bin / sh”;'脚本按预期运行!