首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >CENTOS -(让用户输入无效)

CENTOS -(让用户输入无效)
EN

Stack Overflow用户
提问于 2014-01-15 00:03:03
回答 1查看 1K关注 0票数 0

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

代码语言:javascript
运行
复制
@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};

但这是我的输出:

代码语言:javascript
运行
复制
MAIL_ADDRESSES
[Blank]
[Blank]
[Blank]

我做错了什么?我该怎么解决这个问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-15 00:09:17

首先,让它总是运行它的食谱在/bin/sh,而不是/bin/bash。您在这里为read使用的一些功能是Bash特有的,在标准POSIX shell中是不可用的。

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

代码语言:javascript
运行
复制
@printf 'Please enter email-addresses: '; \
    read EMAIL_ADDRESSES; \
    echo $$EMAIL_ADDRESSES

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

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21126638

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档