为什么在 .profile 中设置别名不起作用?

tal*_*ees 15 command-line bash alias .profile

我将其作为 .profile 中的最后一行:

alias gl="cd /home/jrenner/glances/glances"
Run Code Online (Sandbox Code Playgroud)

但即使在重新启动后,我在键入 gl 时也找不到命令。怎么了?我以正确的用户身份登录。

小智 9

别名在放入.profile文件时并不总是有效的原因有两个。第一个是.profile(or .bash_profile) 文件仅针对登录 shell 运行。如果您在 X 下的终端窗口中启动 bash,您的终端模拟器(例如 gnome-termanl)可能没有将 bash 作为登录 shell 运行。[如果您愿意,大多数人都可以选择更改此设置,但默认情况下(无论如何对于 gnome-termal)不是将其作为登录 shell 运行。]
该 shell 将是一个交互式 shell,因此.bashrc将运行。

但是,通常 bash 在 X 会话启动时已作为登录 shell 运行。因此,如果其中有别名命令,.profile它们将与设置环境变量(如 PATH 等)一起执行。当打开终端窗口时,将运行一个新的 bash 实例来提示并在该终端窗口中执行命令。与环境变量不同,别名不能从一个 bash 实例导出到由它启动的新实例。所以别名不会传递给新的 shell。

要看到这一点,请尝试以下实验:

export ROBERT=bob
alias james=jimmy
echo $ROBERT
alias james
bash               #start a new bash instance
echo $ROBERT
alias james
exit               #end the new bash instance and revert to the original one
echo $ROBERT
alias james
Run Code Online (Sandbox Code Playgroud)

请注意,.bashrc当 bash 作为登录 shell 启动时,它不会由 bash 运行。因此,除非您的别名.bashrc来自您的.profile,否则将您的别名放在那里并不总是有效,这是一种非常常见的做法。


Jas*_*son 4

我很确定 lpanebr 的想法会起作用,但这里有一个更优雅的解决方案。执行别名命令,.bashrc 这就是我的做法,或者有些人更喜欢添加专用于别名的文件。调用它.alias或其他任何名称并添加.alias到您的.bashrc

希望我可以像@lpanelbr 一样进行格式化。我想知道有没有维基百科?