Variables 如果未定义,如何提示输入特定于目标的Makefile变量?
这与类似,但我只希望Variables 如果未定义,如何提示输入特定于目标的Makefile变量?,variables,makefile,Variables,Makefile,这与类似,但我只希望make在运行特定目标且未指定强制变量时提示输入值 当前代码: 这只会导致以下输出,而没有提示: 密码:读取:1:arg计数 @午夜[…]” 这里重要的一点是,只有在运行此目标时,并且只有在尚未定义变量时,我才需要询问。我不能使用configure脚本,因为我显然不应该在配置脚本中存储密码,而且这个目标不是标准安装过程的一部分。结果是,Makefiles没有使用Dash/Bash样式的引号,Dash的read内置需要一个变量名,不像Bash。结果代码: install c
make
在运行特定目标且未指定强制变量时提示输入值
当前代码:
这只会导致以下输出,而没有提示:
密码:读取:1:arg计数
@午夜[…]”
这里重要的一点是,只有在运行此目标时,并且只有在尚未定义变量时,我才需要询问。我不能使用
configure
脚本,因为我显然不应该在配置脚本中存储密码,而且这个目标不是标准安装过程的一部分。结果是,Makefiles没有使用Dash/Bash样式的引号,Dash的read
内置需要一个变量名,不像Bash。结果代码:
install crontab delicious:$(delicious\u目标\u路径)
@而[-z“$$DELICIOUS_USER”];做\
阅读-r-p“Delicious用户名:”Delicious_用户\
完成&&\
而[-z“$$DELICIOUS_PASSWORD”];做\
读取-r-p“美味密码:”美味密码\
完成&&\
而[-z“$$DELICIOUS_PATH”];做\
阅读-r-p“美味备份路径:”美味路径\
完成&&\
( \
CRONTAB_NOHEADER=Y CRONTAB-l | | true\
打印文件“%s”\
“@午夜”\
“$(美味目标路径)”\
“\“$$DELICIOUS\u用户”\
“\“$$DELICIOUS\u密码”\
“\”$$DELICIOUS\u PATH\”\
printf'\n')| crontab-
结果:
$crontab-r;使安装crontab美味&&crontab-l
美味用户名:a\b c\d
美味密码:efg
备份路径:h\i
没有用于的crontab
@午夜“/usr/local/bin/export\u Delicious”“a\b c\d”“e f g”“h\i”
$DELICIOUS\u PASSWORD=foo使安装crontab DELICIOUS&&crontab-l
美味用户名:bar
美味备份路径:baz
@午夜“/usr/local/bin/export\u Delicious”“a\b c\d”“e f g”“h\i”
@午夜“/usr/local/bin/export_Delicious”“bar”“foo”“baz”
此代码:
- 将所有输入字符视为文字,因此它可以处理空格和反斜杠
- 避免用户在不写入任何内容的情况下按Enter键时出现问题
- 使用环境变量(如果存在),以及
- 无论crontab是否为空,都可以工作
@while [ -z "$$CONTINUE" ]; do \
read -r -p "Type anything but Y or y to exit. [y/N] " CONTINUE; \
done ; \
if [ ! $$CONTINUE == "y" ]; then \
if [ ! $$CONTINUE == "Y" ]; then \
echo "Exiting." ; exit 1 ; \
fi \
fi
我希望这能帮助别人。在makefile中很难找到有关使用用户输入if/else的更多信息。除非我的眼睛欺骗了我,否则只要按Enter键,while循环就会重复,而不是使用默认的
N
。您应该使用a。您还可以简化if
语句:if[$$CONTINUE!=“y”&[$$CONTINUE!=“y”];然后
。甚至[$$CONTINUE=“y”]|[$$CONTINUE=“y”]| |(回显“退出”。退出1;)
@while [ -z "$$CONTINUE" ]; do \
read -r -p "Type anything but Y or y to exit. [y/N] " CONTINUE; \
done ; \
if [ ! $$CONTINUE == "y" ]; then \
if [ ! $$CONTINUE == "Y" ]; then \
echo "Exiting." ; exit 1 ; \
fi \
fi