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

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

这是我的 .profile 中的最后一行:

alias gl="cd /home/jrenner/glances/glances"

但即使重启后,输入 gl 时仍提示“未找到命令”。发生了什么?我以正确的用户身份登录。

答案1

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

但是,通常情况下,当启动 X 会话时,bash 已作为登录 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

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

答案2

我非常确定 lpanebr 的想法是可行的,但这里有一个更优雅的解决方案。在 中执行该别名命令 这.bashrc 就是我的做法,或者有些人更喜欢添加一个专用于别名的文件。将其命名为.alias或任何其他名称,然后添加.alias到您的.bashrc

希望我能像@lpanelbr 那样进行格式化。我想知道是否有 wiki?

答案3

在 Ubuntu 中执行此操作的正确方法是将您的别名添加到~/.bash_aliases。如果文件不存在,则创建该文件。

该文件(如果存在)从默认值调用~/.bashrc,并且别名也将在您的终端仿真器中可用。

答案4

$ bash #start a new bash instance

这是我的服务器的问题。source .profile出于某种原因,Simple 无法工作

相关内容