一.起因
今天被基友催着开始折腾hadoop集群的问题,考虑到要批量部署以及统一性的问题准备写个部署脚本,对bash脚本的话我也写过不少了,然而没想到还是碰到了问题。
因为要安装nutch、hbase、apache-ant、jdk等一堆程序,所以环境变量也有很多需要添加的,所以我没考虑使用echo逐行输入,而是使用了cat重定向到文件的方法,那么问题就来了,作为环境变量,那必然会有一大堆的"$"符号,于是乎……它们全被解析成具体的路径了,这就很尴尬。
二.解决方案
在手动修理完后我开始研究怎么样阻止这一悲剧的发生,经过一波搜索,我找到了两个办法。
①.另辟蹊径,既然你要变,我就让你先转义,看你还怎么变,在所有"$"前添加"\",然后就变成了"\$",这样便没有了问题。
②中规中矩,追根究底。按照V2上一篇帖子的说法,我去查了查shell相关的文档,然后发现这个是有提到解决办法的,那就是在EOF两边加上引号,如下
cat > output <<'EOF' ... EOF 或 cat > output <<"EOF" ... EOF
这样便会阻止在重定向输出过程中环境变量被替换的问题了。
文章评论
看完了还不走。😀