当前位置: 首页 > 面试题库 >

如何获取GNU Makefile中使用的shell命令的退出状态?

贾俊艾
2023-03-14
问题内容

我在执行linux工具时有一个makefile规则。我需要检查工具命令的退出状态,如果该命令失败,则必须中止make。

我尝试检查$?,$$?\ $?等等在makefile中。但是当makefile运行时,它们给了我语法错误。

什么是正确的方法?

这是Makefile中的相关规则

    mycommand \
    if [ $$? -ne 0 ]; \
    then \
        echo "mycommand failed"; \
        false; \
    fi

问题答案:

在makefile中:

mycommand || (echo "mycommand failed $$?"; exit 1)

makefile操作中的每一行都调用一个新的shell-必须在命令失败的操作行中检查错误。

如果mycommand失败,则逻辑分支到echo语句,然后退出。



 类似资料:
  • 问题内容: 我需要从命令行程序中获取退出状态代码。不用担心,我用$?。但是对于ftp,即使它没有连接,它也会打开ftp shell,所以我无法理解连接没有建立。 尝试以下代码以了解: 有什么帮助吗?谢谢菲利波 问题答案: 您应该从ftp命令中查找成功消息,而不是查找状态。这是“ 226传输完成”。您可以在系统上使用ftp手册进行确认。 这是一个示例脚本。

  • 我该如何做到这一点,特别是因为您似乎无法真正运行中的任何类型的groovy代码?

  • 问题内容: 我的最终目标是捕获终端中执行的上一条命令。由于〜/ .bash_history不包含当前终端会话中的命令,因此我不能简单地读取该文件。 在另一个线程中,我找到了以下脚本: 这与我要查找的内容非常接近,但是由于它是作为子进程启动的,因此它也不会包括当前终端会话的历史记录。有什么办法可以在当前shell中执行类似的命令? 问题答案: 为什么不直接读取文件。 〜/ .bash_history

  • 问题内容: 尝试读取的版本号时,我得到了很多其他行,需要忽略。我尝试阅读的手册,并尝试了以下命令: 我想知道这是否正确吗? 问题答案: 是的,这是从命令获取第一行输出的一种方法。 如果命令以相同的方式输出任何您想要捕获的标准错误,则需要将命令的标准错误重定向到标准输出流: 捕获第一行的方法还有很多,包括(在第一行之后退出),(仅打印第一行,但读取所有内容),(仅打印第一行,但再次读取所有内容)等。

  • 我想知道这是不是正确的做法?

  • 问题内容: 我正在使用JSCH -SSH库在“ shell”通道中执行命令,但找不到找到两种方法的方法: 1)如何查找命令是否在远程unix box上完全执行? 2)如何在String中捕获命令输出,而不是在System.out控制台上打印它? 下面是我的代码片段,可以在system.out上显示shell命令输出 注意:我不想使用“ exec”通道,因为它为每个命令启动一个新进程,并且不记得已导