gpt4 book ai didi

bash - 在 GNU Make 4 中使用 "bash -e"作为 shell 时,rm -f 因丢失文件而失败

转载 作者:行者123 更新时间:2023-12-04 14:34:31 25 4
gpt4 key购买 nike

我有一个如下所示的 Makefile:

.ONESHELL:
SHELL = /bin/bash
.SHELLFLAGS = -e

clean:
rm -f foo

.PHONY: clean
foo不存在。当我在 Debian、GNU Make 4.1 上运行它时,我收到此错误:
rm -f foo
/bin/bash: rm -f foo: No such file or directory
Makefile:6: recipe for target 'clean' failed
make: *** [clean] Error 1

当我在 macOS 上运行它时,GNU Make 3.81 它按预期工作。如果我写 -rm -f 没有区别而不是 rm -f .

为什么我会收到错误消息?运行 bash -e -c "rm -f foo" ; echo $?在 shell 打印 0在两个系统上。

我错过了什么吗?

最佳答案

必须非常仔细地阅读错误消息:

/bin/bash: rm -f foo: No such file or directory

这不是来自 rm 的消息说找不到 foo ,这是来自 Bash 的消息,告诉它找不到文件 rm -f foo (文件名中有空格)。

.SHELLFLAGS = -e ,shell 获得的内容与命令行相同:
bash -e "rm -f foo"

所以它寻找一个文件 rm -f foo从中读取命令。您需要明确添加 -c标志告诉它将参数本身作为命令,即 .SHELLFLAGS = -ec , 导致
bash -ec "rm -f foo"

不出所料, default value.SHELLFLAGS包含 -c :

The argument(s) passed to the shell are taken from the variable .SHELLFLAGS. The default value of .SHELLFLAGS is -c normally, or -ec in POSIX-conforming mode.

关于bash - 在 GNU Make 4 中使用 "bash -e"作为 shell 时,rm -f 因丢失文件而失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47286460/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com