开发者社区> 问答> 正文

在C中称为“ bash [脚本名称]”

我正在尝试运行bash脚本以生成OpenSSL证书。我的bash脚本与c代码位于同一目录中。

相关的C代码:

pid_t pid = fork();
if(pid > 0){
    char* arr[] = {"./generate_cert.sh", "direct"};
    int succ = execv(arr[0], arr);
    printf("succ: %d\n", succ);
    exit(1);
}else if(pid < 0){
    printf("Fork failed\n");
    exit(-1);
}

generate_cert.sh,我最终将扩展的测试bash脚本是:

#!/bin/bash
echo "$1"

似乎我的权限被./generate_cert.sh拒绝。我需要改为运行bash generate_cert.sh。我该如何使用execv?

展开
收起
祖安文状元 2020-01-08 15:07:37 367 0
1 条回答
写回答
取消 提交回答
  • 根据execv手册页,该数组必须以空指针终止。

    因此,与此类似(未经测试):

    char* arr[] = {"./generate_cert.sh", "direct",NULL};
      int succ = execv(arr[0], arr);
    
    

    编辑:

    OP的问题原来是脚本文件上未设置执行位。该问题由解决chmod +x generate_cert.sh,但是另一种选择是改为execv致电/bin/bash。即沿线的东西。

    char* arr[] = {"/bin/bash", "./generate_cert.sh", "direct",NULL};
    int succ = execv(arr[0], arr);
    
    2020-01-08 15:07:48
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载