Why aliases in a non-interactive Bash shell do not work

前端 未结 4 766
青春惊慌失措
青春惊慌失措 2020-11-27 15:27

I am trying to use aliases in a non-interactive bash shell. I have defined my aliases in ~/.bashrc and I have set the variable BASH_ENV=~/startUpFile

相关标签:
4条回答
  • 2020-11-27 16:07

    The command shopt -s expand_aliases will allow alias expansion in non-interactive shells.

    0 讨论(0)
  • 2020-11-27 16:08

    .bashrc is only processed by interactive shells.

    In addition, aliases are not expanded when the shell is not interactive, unless the expand_aliases shell option is set using shopt. Unless, of course, POSIX mode is invoked by calling the shell with the name sh instead of bash.

    People who use aliases a lot often source their .bashrc at the end of their profile so that the aliases are there even for non-interactive shells. This might not be the best way, but it is pretty common.

    It's things like this that lead me to believe that in the 21st century we should abandon shell scripts in favor of a full-blown language like Python. It's a lot more predictable.

    0 讨论(0)
  • 2020-11-27 16:16

    I had similar issue, in the end, I found out that ~/.bashrc was all I needed.

    However, in Ubuntu, I had to comment the line that stops processing ~/.bashrc :

    If not running interactively, don't do anything
    [ -z "$PS1" ] && return
    
    0 讨论(0)
  • 2020-11-27 16:28

    You have to

    shopt -s expand_aliases
    

    in the file pointed to in your BASH_ENV

    0 讨论(0)
提交回复
热议问题