.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
答案1
总结: 作为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
。
执行 source~/.profile
操作可以定义别名,但它也会重新运行该文件中的所有其他内容,其中大部分内容您无需再次运行,而有些内容可能会执行您不想要的操作。例如,~/.profile
检查是否~/bin
存在,如果存在,则将其添加到您的$PATH
。如果您~/.profile
多次执行 source 操作,则同一个目录可能会在 中出现多次$PATH
。这种情况必须经常发生才会造成严重的性能问题。但是,当您检查 之类的命令的输出时,即使是一次额外的发生也会引起混淆printenv PATH
。
如果你的别名未定义即使在初始登录 shell 中,例如当您从虚拟控制台或通过 SSH 登录时,然后Kulfy 暗示问题可能在于您有一个~/.bash_profile
或~/.bash_login
文件。如果这样的文件存在,Bash 登录 shell 会使用它而不是~/.profile
。大多数情况下,您不希望在 Ubuntu 上拥有这样的文件,如果有的话,您很可能希望将其发送到源,~/.profile
以便命令~/.profile
仍能运行。
但即使是这样,您也不应该在~/.profile
(也不应在~/.bash_profile
或中~/.bash_login
) 定义别名,因为这不会在非登录 shell 中定义它们。