使用 shell 检查条件中嵌套的命令

使用 shell 检查条件中嵌套的命令

我目前正在尝试创建一种简短且可移植的方法来检查我的工作 git 目录是否脏并相应地返回 T/F。我的最终目标是将其合并到 Makefile 中,并且我已这样实现它:

GIT_DIRTY       := $(shell [[ -n $(git status -s) ]] && echo '\ dev')

我的问题是[[操作符仅是 bash,并且作为要求,该 Makefile 需要能够sh仅使用功能齐全的 shell 运行。我的预感是有一种方法可以使用[or来完成此test操作,但我不确定如何实现。

谢谢!

答案1

GIT_DIRTY := $(shell [ -n "$(git status -s)" ] && echo '\ dev')

应该可以工作 - 但事实并非如此,即使该命令在sh.看来shell功能中的某些东西make不喜欢命令。

这是一种解决方法,使用更简单的命令来提供shell并使用条件函数本身make来完成其余的工作:

GIT_STATUS := $(shell git status -s)

GIT_DIRTY := $(if ${GIT_STATUS},DIRTY,CLEAN)

all:
    @echo ${GIT_DIRTY}

相关内容