makefile - CENTOS - Linux - Make - Makefile(获取用户输入不起作用)

标签 makefile centos gnu-make

对于我的一个项目,我使用 Makefile 来执行一些任务。但由于某种原因,系统没有捕获我的输入,或者我可能做错了什么。这是我的代码:

@read -e -p "Please enter email-addresses: " -i "user1@domain.com,user2@domain.com" EMAIL_ADDRESSES
@echo $EMAIL_ADDRESSES;
@echo $$EMAIL_ADDRESSES;
@echo ${EMAIL_ADDRESSES};
@echo $${EMAIL_ADDRESSES};

但这是我的输出:
MAIL_ADDRESSES
[Blank]
[Blank]
[Blank]

我究竟做错了什么?我该如何解决?

最佳答案

首先,make 总是在 /bin/sh 中运行它的食谱。 ,而不是 /bin/bash .您在此处为 read 使用的一些功能特定于 Bash,在标准 POSIX shell 中不可用。

其次,make 在不同的 shell 中运行配方中的每一行。因此,当 shell 退出时,您在一行中设置的任何 shell 变量都会丢失,并且在下一行中不可用。如果要保留它们,则需要将整个脚本放在单个(逻辑)行上,如下所示:

@printf 'Please enter email-addresses: '; \
    read EMAIL_ADDRESSES; \
    echo $$EMAIL_ADDRESSES

如果您真的想使用 Bash 功能,您可能应该直接调用它。

最后,使用来自 makefile 的标准输入通常是个坏主意。如果有人想在启用并行作业的情况下运行您的 makefile,那么除了一个命令之外的所有命令都将没有任何标准输入(它将从 /dev/null 重定向)。最好要求用户在命令行上提供值作为 make 变量赋值。

关于makefile - CENTOS - Linux - Make - Makefile(获取用户输入不起作用),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21126638/

相关文章:

centos - 在 PHP 版本 7.2.2 上调用未定义函数 imagecreatefromwebp()

php - curl 错误 28 : Resolving timed out after 5001 milliseconds

c - Makefile 不使用变量

makefile - 如何在 qmake 生成的 Makefile 中添加自定义目标?

linux - Makefile 宏修饰符

go - 为 golang 静态二进制文件构建、部署、推送 docker 镜像

linux - 使用 grep 值创建文件

visual-c++ - MSVC - 通过 Makefile 创建静态库

python - 导入错误/无法导入名称截断器

assembly - 4字节的汇编指令如何编码4字节的内存地址?