在C程序中使用execl执行shell脚本

在C程序中使用execl执行shell脚本

我正在努力在我的 C 代码中运行一个简单的 shell 脚本

为了简单起见,我删除了其他所有内容

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <stdlib.h>
#define SHELL "/bin/sh"
int main()
{


execl("/home/amir/Desktop/OSAssignment/script.sh","script.sh",NULL);



        return 0;
}

我的 C 程序和 script.sh 都位于 Desktop-> OSAssignment ->

我已经编译了程序并执行它没有显示任何内容(如果我在 exec 命令下方或上方放置 printf 语句,它将成功打印)我已经尝试了所有方法

这是我的 Shell 脚本文件

echo "Hi"

答案1

没有显式解释器执行的脚本必须是可执行的并且具有正确的#!-line。

如果没有#!-line,或者它不可执行,则必须使用解释器执行脚本,如下所示

sh /path/to/script.sh

您还应该检查返回代码以execl()查看调用是否失败。如果失败,您可以使用perror()打印错误消息。请参阅perror您系统上的手册。

答案2

阅读以下文档执行(3)执行(2)(由 调用execl)。它们可能会失败(这是它们返回的唯一方式;成功后这些函数不会返回,因为它们正在更改进程的整个虚拟地址空间)。

所以代码(使用错误(3)):

 execl("/home/amir/Desktop/OSAssignment/script.sh","script.sh",NULL);
 perror("execl script.sh");

您需要让脚本可执行,并且应该以舍邦。它的第一行应该是#!/bin/sh

请仔细阅读您使用的每个功能的文档。

相关内容