直到调用“source .profile”时,“.profile”中的“alias”命令才被识别

直到调用“source .profile”时,“.profile”中的“alias”命令才被识别

.profile我的主目录中的文件中存在以下行:

alias flux='redshift -O 2500'

但每当我登录并输入时,flux我都会得到一个flux is not a recognized command

然后我再次执行source .profile并输入flux,它完美地运行了。

我在 Ubuntu 20.04 上

为什么除非我做,否则alias我的不工作?.profilesource .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

~/.bashrcUbuntu默认会检查是否~/.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 中定义它们。

相关内容