在调用 `source .profile` 之前无法识别 `.profile` 中的 `alias` 命令

amo*_*aza 5 alias .profile

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

alias flux='redshift -O 2500'

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

然后我再次输入source .profile并输入flux,它完美地工作。

我在 Ubuntu 20.04

为什么aliasin my.profile不工作,除非我做 a source .profile

编辑:我现在明白这.profile不是放置它的正确位置。

我最终.bashrc使用以下source命令从文件中加载别名:

for file in ~/.dotfiles/.{exports,aliases}; do
    [ -r "$file" ] && source "$file"
done
unset file
Run Code Online (Sandbox Code Playgroud)

Eli*_*gan 8

TL;DR: 正如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.


Sourcing~/.profile用于定义别名,但它还会重新运行该文件中的所有其他内容,其中大部分内容您不需要再次运行,其中一些可能会执行您不想要的操作。例如,~/.profile检查是否~/bin存在,如果存在,则将其添加到您的$PATH. 如果您~/.profile多次获取源代码,您可以在$PATH. 这必须发生很多次才能导致严重的性能问题。但是,当您检查诸如printenv PATH.

如果您的别名甚至在初始登录 shell 中都没有定义,例如当您从虚拟控制台或通过 SSH 登录时,那么正如Kulfy 所暗示的,问题可能是您有一个~/.bash_profileor~/.bash_login文件。如果存在这样的文件,Bash 登录 shell 将提供它而不是~/.profile. 大多数情况下,您不希望在 Ubuntu 上有这样的文件,如果有,您很可能希望它是源代码,~/.profile以便命令~/.profile仍然运行。

但即使是这种情况,您也不应该在~/.profile(或 in~/.bash_profile~/.bash_login) 中定义别名,因为这不会在非登录 shell 中定义它们。