Linux环境中alias不生效问题

很多时候,实际结果往往和我们的预期不一致,其中必有蹊跷。。。

问题

由于公司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
    7
    expand_aliases 	off
    root
    /usr/bin/whoami
    ================
    expand_aliases on
    2018-11-06 22:20:01
    /usr/bin/whoami
    • 此处我们注意到expand_aliases在非交互shell中默认关闭,并且用which获取该命令的绝对路径并没有发生改变,但是执行结果已经符合预期。

参考

冷月无声 wechat
关注也是一种力量
-------------End of article. I appreciate whoever read and leave commends on articles.-------------

本文标题:Linux环境中alias不生效问题

文章作者:冷月无声

发布时间:2018年11月06日 - 22:11

最后更新:2018年11月08日 - 19:11

原始链接:https://www.lengyuewusheng.com/2018/11/06/00052_Linux环境中alias不生效问题/

许可协议:本博客所有文章除特别声明外,均采用 BY-NC-SA 3.0许可协议。转载请注明出处!

感谢鼓励!