.profile
我的主目录中的文件中有以下行:
alias flux='redshift -O 2500'
但是每当我登录并输入时,flux
我都会得到一个flux is not a recognized command
.
然后我再次source .profile
输入并输入flux
,它工作得很好。
我在 Ubuntu 20.04
为什么alias
我.profile
不工作,除非我做一个source .profile
?
编辑:我现在明白这.profile
不是放置这个的正确位置。
我最终使用以下命令从.bashrc
文件中加载别名:source
for file in ~/.dotfiles/.{exports,aliases}; do
[ -r "$file" ] && source "$file"
done
unset file
TL;DR: 正如Gunnar Hjalmarsson 所说,将别名放入
~/.bash_aliases
.中的命令
~/.profile
由登录 shell 运行。该文件是一个很好的地方,可以在每个会话开始时执行一次但不要在每次启动新 shell 时重复。~/.profile
有利于设置环境变量,所有子进程都会继承。别名不会被继承,并且您在 Ubuntu 的终端窗口中获得的 shell 不是(默认情况下)登录 shell。要为所有交互式 Bash shell 定义别名,定义需要在每次启动此类 shell 时运行它们的地方。
通常的地方是:
~/.bashrc
~/.bash_aliases
新的交互式非登录 shell 源
~/.bashrc
(一些非交互式 shell 也是如此)。默认情况下,您~/.profile
的来源~/.bashrc
。~/.bashrc
Ubuntu 中的默认设置检查是否~/.bash_aliases
存在并获取它。我建议在
~/.bash_aliases
.Sourcing
~/.profile
用于定义别名,但它也会重新运行该文件中的所有其他内容,其中大部分您不需要再次运行,其中一些可能会做您不想要的事情。例如,~/.profile
检查是否~/bin
存在,如果存在,将其添加到您的$PATH
. 如果您~/.profile
多次来源,您可以获得相同的目录多次出现在$PATH
. 这必须经常发生才能导致严重的性能问题。但是,当您检查诸如printenv PATH
.如果您的别名即使在初始登录 shell 中也没有定义,例如当您从虚拟控制台或通过 SSH 登录时,那么正如Kulfy 所暗示的那样,问题可能是您有一个
~/.bash_profile
or~/.bash_login
文件。如果存在这样的文件,Bash 登录 shell 会获取它而不是~/.profile
. 大多数情况下,您不希望在 Ubuntu 上拥有任何这样的文件,如果这样做,您很可能希望它提供源代码~/.profile
,以便其中的命令~/.profile
仍然运行。但即使是这种情况,您也不应该在
~/.profile
(也不在~/.bash_profile
or~/.bash_login
)中定义别名,因为这不会在非登录 shell 中定义它们。