我正在尝试将命令的标准退出状态保存在我的 makefile 的变量中,但我不知道该怎么做。
我试过这个:
pruebas:
@A= $(ls)
Run Code Online (Sandbox Code Playgroud)
......但它不起作用。
您可以使用$(shell command)语法从 Makefile 在 shell 中执行命令。例如,如果您想ls在 bash 中退出命令的状态,您可以输入:
ls --qwfpgjl > /dev/null 2>&1 ; echo $?
Run Code Online (Sandbox Code Playgroud)
这可能需要一些解释:该> /dev/null 2>&1部分将标准输出和标准错误都重定向到 /dev/null 以便您看不到任何输出,然后是 'echo $?' 打印最后一个命令的退出状态。例如,您可以在命令行中尝试此操作以查看它是否适合您
ls --qwfpgjl > /dev/null 2>&1 ; echo $?
Run Code Online (Sandbox Code Playgroud)
应该给你
2
Run Code Online (Sandbox Code Playgroud)
因为这是ls在存在未知参数时返回的错误(请参阅ls手册页)。
现在如何将它包含在你的 Makefile 中?只需添加行
A=$(shell ls > /dev/null 2>&1 ; echo $$?)
Run Code Online (Sandbox Code Playgroud)
到你的 Makefile。注意额外的$in $$?,它make表明$?它不是 Makefile 中的变量。
应该是这样!在这里你可以看到我用来测试这个行为的 Makefile:
#SHELL := /bin/bash
A=$(shell ls > /dev/null 2>&1 ; echo $$? )
test:
@echo $A
.PHONY: test
Run Code Online (Sandbox Code Playgroud)
注意:默认
make选择/bin/sh外壳,但您可以通过设置覆盖它
SHELL := /bin/bash
Run Code Online (Sandbox Code Playgroud)
这对于不在/bin/sh.
| 归档时间: |
|
| 查看次数: |
9329 次 |
| 最近记录: |