bash - 如何使用 shell echo 命令在 GNU Makefile 目标中附加文件
问题描述
我正在尝试使用以下语法从 make 目标内部将一些文本附加到文件中
$shell(echo "module load ABC/$$(MODULE_LOAD)" >> $@/_env/local/filexyz)
但 GNU Make 4.2.1 抱怨以下内容。
/bin/sh: -c: line 21: syntax error near unexpected token echo
总之,我希望文件 PQR/_env/local/filexyz 在最后一行包含以下文本
module load ABC/4.5.6
解决方案
首先,这是 make 函数的错误语法;应该$(shell ...)
不是$shell(...)
。
其次,我假设这实际上出现在食谱中,因为您使用的是$@
. 提问时请提供足够的详细信息,以便我们可以看到整个上下文,例如整个食谱而不仅仅是一行。
在编写配方时使用该函数是一种严重的反模式shell
,因为配方中的每一行都已由shell 运行。这只是令人困惑,并且可能会导致使用该shell
功能出现许多问题。
第三,您不想转义变量$$(MODULE_LOAD)
,因为这会导致 shell 运行MODULE_LOAD
可能不存在的命令。
直接写就行了:
echo "module load ABC/$(MODULE_LOAD)" >> $@/_env/local/filexyz
推荐阅读
- java - Java Clip 慢音量和平移更新
- sql - 如何在条件 Postgresql 的情况下从 json 中删除对象
- arrays - 如何在swift ui中制作一个从不重复(连续)的随机数列表
- visual-studio-code - 在 Visual Studio 代码终端中使用 vim 键绑定
- python - PyTorch nn.CrossEntropyLoss IndexError: Target 2 is out of bounds
- excel - 循环根据电子表格中的两个条件搜索目录中丢失的文件
- android - android 双向绑定无法解析 kotlinx.coroutines.flow.MutableStateFlow 的设置器
- python - 将 PySpark groupby collect_set 迁移到 Dask
- unity3d - 为什么光线投射会检测到玩家,尽管它是如何在它前面创建的?
- javascript - date-fns 中的 parse 函数返回前一天的值