首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

获取shell脚本的退出代码,在C程序中

可以使用system函数来执行shell脚本,并通过WEXITSTATUS宏来获取脚本的退出代码。

具体步骤如下:

  1. 在C程序中包含头文件#include <stdlib.h>#include <sys/wait.h>
  2. 使用system函数执行shell脚本,例如system("sh script.sh"),其中"script.sh"是你要执行的shell脚本。
  3. 使用waitpid函数等待子进程结束,并通过WEXITSTATUS宏获取子进程的退出代码。示例代码如下:
代码语言:c
复制
#include <stdlib.h>
#include <sys/wait.h>
#include <stdio.h>

int main() {
    int status;
    if (system("sh script.sh") == -1) {
        // 执行shell脚本失败
        printf("执行shell脚本失败\n");
        exit(EXIT_FAILURE);
    }
    if (waitpid(-1, &status, 0) == -1) {
        // 等待子进程失败
        printf("等待子进程失败\n");
        exit(EXIT_FAILURE);
    }
    if (WIFEXITED(status)) {
        // 子进程正常退出
        int exit_code = WEXITSTATUS(status);
        printf("shell脚本的退出代码:%d\n", exit_code);
    } else {
        // 子进程异常退出
        printf("子进程异常退出\n");
    }
    return 0;
}

这样就可以在C程序中获取到shell脚本的退出代码了。

推荐的腾讯云相关产品:腾讯云服务器(CVM),产品介绍链接地址:https://cloud.tencent.com/product/cvm

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

linux c程序获取shell脚本输出

前言   Unix界有一句名言:“一行shell脚本胜过万行C程序”,虽然这句话有些夸张,但不可否认是,借助脚本确实能够极大简化一些编程工作。...比如实现一个ping程序来测试网络连通性,实现ping函数需要写上200~300行代码,为什么不能直接调用系统ping命令呢?通常在程序通过 system函数来调用shell命令。...方法就是fork一个子进程,并创建一个匿名管道,子进程执行shell命令,并将其标准输出dup 到匿名管道输入端,父进程从管道读取,即可获得shell命令输出,代码如下:   /**   *...小结   有统计数据表明,代码缺陷率是一定,与所使用语言无关。Linux提供了很多实用工具和脚本程序调用工具和脚本,无疑可以简化程序,从而降低代码缺陷数目。...Linux shell脚本也是一个强大工具,我们可以根据需要编制脚本,然后程序调用自定义脚本

5.6K20

shell脚本】$ shell脚本使用

shell脚本 '$' 与不同符号搭配其表示意义也会不同 特殊标志符 含义 $0 当前脚本文件名 $n 传递给脚本或函数参数。n 是一个数字,表示第几个参数。...例如,第一个参数是$1,第二个参数是$2 $# 传递给脚本或函数参数个数 $* 传递给脚本或函数所有参数 $@ 传递给脚本或函数所有参数 $?...上个命令退出状态 $$ 当前Shell进程ID $() 与 `(反引号) 一样用来命令替换使用 ${} 引用变量划分出边界 注释:$* 和 $@ 都表示传递给函数或脚本所有参数,不被双引号(" "...)包含时,都以"$1" "$2" … "$n" 形式输出所有参数。...但是当它们被双引号(" ")包含时,"$*" 会将所有的参数作为一个整体,以"$1 $2 … $n"形式输出所有参数;"$@" 会将各个参数分开,以"$1" "$2" … "$n" 形式输出所有参数

6.2K20
  • Shell-aliasShell脚本使用

    概述 shell开启alias 实际操作 概述 众所周知,shell脚本使用是非交互式方式,非交互式模式下alias扩展功能默认是关闭,此时虽然可以定义alias别名,但是shell不会将alias...别名扩展成对应命令,而是将alias别名本身当作命令执行,如果shell内置命令和PATH均没有与alias别名同名命令,则shell会找不到指定命令。...---- shell开启alias 使用shell内置命令shopt命令来开启alias扩展选项。...默认是打开非交互式模式下是关闭,但可以用可shopt来将其开启 shopt -s expand_aliases ---- 实际操作 我们项目中某个模块双机启动脚本(root用户下操作),...项目启动中会依赖一些环境变量,所以双机启动脚本需要显式引入.bash_profile文件。 所以我们将 开启alias命令放在 .bash_profile

    2.2K10

    python脚本执行shell命令方法

    python脚本执行shell命令方法 最近在写python一些脚本,之前使用python都是django中使用,可能大部分内容都是偏向于后端开发方面的,最近在写一些脚本时候,发现了...使用Python处理一个shell命令或者一个执行一个shell脚本,一般情况下,有下面三种方法,下面我们来看: 第一种方法是使用os.system方法 os.system("cmd") 我们在当前目录下面创建一个...命令打印出来aaa.sql内容,然后下面出现数字0代表上述命令执行成功;如果我们打印bbb.sql则返回值是256,表示执行中出现了问题。...> commands.getstatus('aaa.sql') 8'-rw-r--r-- 1 root root 4 Dec 10 20:36 aaa.sql' 有了上面的基础,我们可以很方便写出如下代码...] 7else: 8 result["result"] = false 9 result["message"] = res 10return Response(result) 如果脚本是对数据库一系列操作

    5.3K00

    数组-Shell脚本基本使用介绍

    Shell脚本在运维工作是极其重要,而数组shell脚本运用无论是循环或运算方面都是非常实用一个环节。...下面是对shell脚本数组方面一些操作在此进行记录,希望能帮助到有兴趣朋友~ 1.数组定义 [root@bastion-IDC ~]# a=(1 2 3 4 5 6 7 8) [root@bastion-IDC...bastion-IDC ~]# echo ${a[@]:0:3} 1 2 3 [root@bastion-IDC ~]# echo ${a[@]:1:4} 2 3 4 5 [root@bastion-IDC ~]# c=...(${a[@]:1:4}) [root@bastion-IDC ~]# echo ${#c[@]} 4 [root@bastion-IDC ~]# echo ${c[*]} 2 3 4 5 直接通过...${数组名[@或*]:起始位置:长度} 切片原先数组,返回是字符串,中间用“空格”分开,因此如果加上”()”,将得到切片数组,上面例子:c 就是一个新数据。

    3.9K100

    shell程序里如何从文件获取第n行

    问: 有没有一种“规范”方式来做到这一点?我一直使用 head -n | tail -1,它可以做到这一点,但我一直想知道是否有一个Bash工具,专门从文件中提取一行(或一段行)。...所谓“规范”,我指的是一个主要功能就是这样做程序。...答: 有一个可供测试文件,内容如下: 使用 sed 命令,要打印第 20 行,可写为 sed -n '20'p file.txt sed -n '20p' file.txt 测试截图如下: 要打印第...8 到第 12 行,则可用命令 sed -n '8,12'p file.txt 如果要打印第8、9行和第12行,可用命令 sed -n '8p;9p;12p' file.txt 对于行数特大文件...,为了提高处理速度,可采用类似如下命令 sed '5000000q;d' file.txt tail -n+5000000 file.txt | head -1 需要关注处理性能伙伴可以在上述命令前加上

    38420

    Shell脚本逐行读取文件命令方法

    方法一、使用输入重定向 逐行读取文件最简单方法是while循环中使用输入重定向。...变量为文本文件每行内容 Tips:可以将上面的脚本缩减为一行命令,如下: [root@localhost ~]# while read rows; do echo "Line contents are...- 使用echo显示输出内容,输出内容包括自定义字符串和变量,$rows变量为文本文件每行内容 Tips:可以将上面的脚本缩减为一行命令,如下: [root@localhost ~]# cat mycontent.txt...|while read rows;do echo "Line contents are : $rows";done 方法三、使用传入文件名作为参数 第三种方法将通过添加$1参数,执行脚本时,脚本后面追加文本文件名称.../bin/bash cat mycontent.txt |awk '{print "Line contents are: "$0}' 运行结果: 总结 本文介绍了如何使用shell脚本逐行读取文件内容

    9K21

    Shell 脚本调用另一个 Shell 脚本三种方式

    被调用脚本与父脚本同一个 Shell 内执行。但是使用 exec 调用一个新脚本以后, 父脚本 exec 行之后内容就不会再执行了。...这是 exec 和 source 区别. source 与 fork 区别是不新开一个子 Shell 来执行被调用脚本,而是同一个 Shell 执行....所以被调用脚本声明变量和环境变量, 都可以脚本中进行获取和使用。 其实从命名上可以感知到其中细微区别,下面通过两个脚本来体会三种调用方式不同: 第一个脚本,我们命名为 1.sh: #!...exec 同一个 Shell 内执行,但是父脚本 exec 行之后内容就不会再执行了 source 同一个 Shell 执行,在被调用脚本声明变量和环境变量, 都可以脚本中进行获取和使用...参考: shell脚本调用另一个脚本三种不同方法(fork, exec, source)

    4.3K20

    一文掌握EOFShell脚本妙用

    前言:  EOF是End Of File缩写,表示自定义终止符。既然自定义,那么EOF就不是固定,可以随意设置别名,意思是把内容当作标准输入传给程序,Linux按Ctrl-d就代表EOF。  ...Shell我们通常将EOF与 << 结合使用,表示后续输入作为子命令或子Shell输入,直到遇到EOF为止,再返回到主调Shell。...回顾一下< <用法,当shell看到< <时候,它就会知道下一个词是一个分界符。该分界符以后内容都被当作输入,直到shell又看到该分界符(位于单独一行)。...通过cat配合重定向能够生成文件并追加操作,它之前先回顾几个特殊符号: < :输入重定向 > :输出重定向 >> :输出重定向,进行追加,不会覆盖之前内容 << :标准输入来自命令行一对分隔号中间内容...YES NULL address varchar(25) YES NULL name age address tom 23 china -在数据库查看新增数据

    4.8K30

    Linux+Windows: 程序崩溃时, C++ 代码,如何获取函数调用栈信息

    一、前言 二、Linux 平台 三、Windwos 平台 一、前言 程序执行过程 crash 是非常严重问题,一般都应该在测试阶段排除掉这些问题,但是总会有漏网之鱼被带到 release 阶段。...因此,程序日志系统需要侦测这种情况,代码崩溃时候获取函数调用栈信息,为 debug 提供有效信息。...这篇文章理论知识很少,直接分享 2 段代码 Linux 和 Windows 这 2 个平台上,如何用 C++ 来捕获函数调用栈里信息。 二、Linux 平台 1....Windows 平台下代码实现,参考了国外某个老兄代码,如下: 1....利用以上几个神器,基本上可以获取程序崩溃时函数调用栈信息,定位问题,有如神助! ----

    5.7K20

    Linux 终端退出一个程序操作命令

    Linux 里中止程序 Linux ,你可以使用 Ctrl+C 键来中止终端运行程序。这对 Ubuntu 和其他 Linux 发行版都适用。 以 ping 命令为例。...按住 Ctrl 键并同时按下 C 键。它向正在运行程序发送 SIGINT 信号以强制退出该命令。...Ctrl+C 对于那些被设计为持续运行直到被打断命令非常有效。你觉得你需要取消命令,就用 Ctrl+C一个更复杂方法,你可以 找到进程 ID 并杀死一个正在运行进程。...如何退出终端 要退出终端本身,不是关闭终端,而是使用 Ctrl+D 键盘快捷键或输入退出命令: exit 这实际上是让你从当前 shell 退出。...当你 Ubuntu 或其他发行版打开一个终端,它会运行默认 shell。当你从这个 shell 退出时,终端也会结束。Ctrl+D 是做同样事情快捷方式,并退出终端。

    5.1K20

    C代码如何使用链接脚本定义变量?

    mod=viewthread&tid=16231 链接脚本,经常有这样代码: SECTIONS { ..... . = ALIGN(4); .rodata : { *(.rodata) } ....我们想对这段空间清零时, 1.汇编代码,可以直接引用__bss_start, _end,比如: ldr r0, =__bss_start ldr r1, =_end 2.C代码,我们不能直接引用它们...C代码为什么要使用取址符号 & ?...原因: 一,C代码,这样语句: int foo = 1000; 会导致2件事情发生: 代码,留出4字节空间,保存数值1000 C语言symbole talbe,即符号表,有一个名为foo...所以:C语言中,要去使用链接脚本定义值时,应该这样做: extern int __bss_start; int val = &__bss_start; 使用取址符号&去得到它在符号表值。

    4K20

    windows程序嵌入Lua脚本引擎--编写自己Lua库

    windows程序嵌入Lua脚本引擎--建立一个简易“云命令”执行系统》一文,我提到了使用Luaffi库,可以让我们像写C代码一样写lua程序。...这是个非常令我们这些C程序员激动事。但是我们使用ffi库写出来程序往往比较大,因为我们可能要声明一些API原型和结构体。...《windows程序嵌入Lua脚本引擎--使用VS IDE编译Luajit脚本引擎》中介绍Lua工程。        ...5 修改《windows程序嵌入Lua脚本引擎--使用VS IDE编译Luajit脚本引擎》中介绍Buildvm工程生成后事件。...事件,将lib_fl.c加入ALL_LIB @set ALL_LIB=lib_base.c lib_math.c lib_bit.c lib_string.c lib_table.c lib_io.c

    2.2K30
    领券