很多时候,实际结果往往和我们的预期不一致,其中必有蹊跷。。。
问题
由于公司hadoop集群迁移,需要对线上几百台历史遗留的脚本进行改造,变更hadoop客户端环境。
思虑再三,借鉴python装饰器的思想,部署一个绿色版的hadoop客户端环境。再将线上各式各样的脚本统一加一行alias hadoop="/path/to/hadoop"
成本最低。
无奈alias貌似并没有生效,实际操作结果和预期不一致。。。
结果
alias 在非交互shell环境中不生效,除非手动设置shopt -s expand_aliases
验证
cat aliasVerifi.sh
1
2
3
4
5
6
7
8
9
10
11
#/bin/bash
shopt |grep -i alias
whoami
which whoami
echo "================"
shopt -s expand_aliases
shopt |grep -i alias
alias whoami='date "+%Y-%m-%d %H:%M:%S"'
whoami
which whoami通过cron调用脚本并将输出写入log文件aliasVerifi.log
cat aliasVerifi.log
1
2
3
4
5
6
7expand_aliases off
root
/usr/bin/whoami
================
expand_aliases on
2018-11-06 22:20:01
/usr/bin/whoami- 此处我们注意到expand_aliases在非交互shell中默认关闭,并且用which获取该命令的绝对路径并没有发生改变,但是执行结果已经符合预期。