为什么 .bashrc 文件中定义的别名不起作用?

Ven*_*esh 19 alias bashrc

我在 .bashrc 文件中给出了别名,如下所示。但是别名不起作用。为什么?

alias c='clear'
alias l='ls -lt'
alias h='history'
alias d='ls -lt |grep "^d"'

export ORACLE_HOME=/ora11gr2/app/oracle/product/11.2.0/db2
export ORACLE_LIB=/ora11gr2/app/oracle/product/11.2.0/db2/lib
export PATH=$ORACLE_HOME/bin:/usr/vac/bin:/usr/vacpp/bin:.    
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:.
Run Code Online (Sandbox Code Playgroud)

Fra*_*ran 33

.bashrc您更改文件后是否有源文件?尝试:

. ~/.bashrc
Run Code Online (Sandbox Code Playgroud)

然后你的 shell 应该会看到这些变化。或者,您可以终止并重新启动 shell。

ps

当你从脚本运行时,加载这个第一个引用

shopt -s expand_aliases
Run Code Online (Sandbox Code Playgroud)

  • 这解决了我的问题!在此之前,我什至尝试通过 SSH 注销并再次登录,但没有任何反应。别名仍然不可用。看起来我每次做 SSH 都必须这样做!你知道为什么会这样吗? (3认同)

小智 5

以防万一任何MacOS用户来寻找这个答案,我在我的 MacBook 上尝试了这个,甚至重新启动终端也不会加载新的别名定义。我能让它发挥作用的唯一方法就是source ~/.bashrc每次都这样做。然后我尝试将别名定义移至~/.bash_profile就是成功的原因。


小智 2

发生这种情况可能是因为您的 PATH 尚未正确设置为使用所有别名引用的二进制文件的绝对路径。即ls存在于/bin/ls.

你可以尝试使用

export PATH=$PATH:$ORACLE_HOME/bin:/usr/vac/bin:/usr/vacpp/bin:.
Run Code Online (Sandbox Code Playgroud)

或者类似的东西

export PATH=$ORACLE_HOME/bin:/usr/vac/bin:/usr/vacpp/bin:/bin:/sbin/:/usr/sbin
Run Code Online (Sandbox Code Playgroud)

如果没有,则使用which查找各个别名引用二进制文件的路径目录(历史记录)。