.bash_profile在哪里?

我想将新别名添加到我的.bash_profile文件中,但我找不到此文件。
它应该在哪里?

它是一个隐藏文件,位于您的主文件夹中:

 ~/.bash_profile 

~扩展到您的主目录。如果您的用户名是user ,结果将是: /home/user/.bash_profile )。

因为它是一个隐藏文件,所以你必须让它可见。 要在Nautilus中执行此操作,请转到“查看”菜单并选中“显示隐藏文件”(或按快捷键Ctrl + H )。

如果您使用Kubuntu和Dolphin,则必须按Ctrl + 切换文件的可见性。

~/.bash_profile不是放置别名和函数的正确位置。 他们应该进入~/.bashrc 。 有关说明,请参见http://mywiki.wooledge.org/DotFiles 。

将所有别名放在用户主目录中的~/.bash_aliases中非常方便。 这是注释中~/.bashrc文件中的建议。

您通常不会在Ubuntu上使用.bash_profile , 也不应该通常创建该文件。 正如jpezz所说 ,它将出现在你的Ubuntu系统的主目录中,这就是~代表的,你可以在那里创建它。 但是如果你这样做,你应该小心,因为它会阻止bash自动运行.profile的命令 – 你几乎肯定会这样做

bash 作为登录shell运行时 ,在WSL或其他方式1中 ,它运行主目录中存在的.bash_profile.bash_login.profile中的第一个。 如果您在登录时要运行特定于bash命令 – 但仅当bash是您的shell时 – 您可以将它们放在.bash_profile 。 但仅仅存在.bash_profile会阻止.profile被使用。

那么你就想从.bash_profile .profile ,假设你想要运行那些命令,你几乎总是这样。 您可以通过将此命令放在.bash_profile来执行此操作:

 . ~/.profile 

(有些读者可能习惯于将它写成. "$HOME/.profile"当它出现在启动脚本中时。这总是很好 – 你可能更愿意将它用于需要在bash以外的shell上工作的命令如果你需要容纳那些不支持标准function的极老shell,那么你也不需要它。在任何情况下, bash总是支持代字号扩展 ,而.bash_profile是只有bash运行来自它的命令,所以. ~/.profile很好。)

这个. 内置源文件,也就是说它运行当前shell中文件的所有命令。 打开交互式bash shell并运行help . 欲获得更多信息。

你在Ubuntu上通常没有.bash_profile的原因,即使你有想要在登录时运行的特定于bash命令,默认情况下,用户的.profile文件包含检查当前shell是否为bash ,然后导致这样的命令运行。

对于.profile.bash_profile等文件的问题,还有另一个答案。 这些文件的缺省版本存在于/etc/skel目录中。 在Ubuntu系统上创建用户帐户时,该目录中的文件将被复制到Ubuntu主目录中 – 包括您在安装Ubuntu时创建的用户帐户。 如果查看该目录,您会注意到有一个名为.profile的文件 – 以及.bashrc等其他文件 – 但是没有名为.bash_profile文件。 这就是为什么 – 或者,实际上, 如何 –没有.bash_profile存在于您的Ubuntu主目录中,除非您自己创建它。


最后,你不应该把别名放在.profile中,也不应该把.bash_profile放在一个好地方,正如geirha正确地说的那样 。 这是因为您希望别名在交互式shell中工作,无论它们是否是登录shell。 相反,在.bashrc或更好的.bash_aliases定义你的别名(如客人boeroe指出的那样 ),默认的.bashrc来源。 请参阅如何创建永久性Bash别名?

默认的.profile文件将检查您是否正在运行.bash shell和源.bashrc如果您是:

 # if running bash if [ -n "$BASH_VERSION" ]; then # include .bashrc if it exists if [ -f "$HOME/.bashrc" ]; then . "$HOME/.bashrc" fi fi 

同时默认的.bashrc将在顶部退出,如果它在非交互式shell中运行则不会执行任何操作,因此如果它在非交互式登录shell中由.profile获取,则其中的命令将不会运行晦涩的场景2

 # If not running interactively, don't do anything case $- in *i*) ;; *) return;; esac 

因此,如果您将别名放在.bashrc.bash_aliases ,您将获得交互式登录shell(使用.profile )以及交互式非登录shell(使用.bashrc )。 这就是你想要的。 只是不要把任何东西放在交互性检查之上,除非你真的, 真的知道你在做什么。


1这个答案最初是针对与WSL相关的问题编写的,但该问题已经作为重复内容完成,这个答案也完全适用于此,所以我扩展了一点并在此处发布了它。

2bash检测到它可能作为登录shell的远程登录的初始shell运行时 – 例如当您使用ssh在远程计算机上运行单个命令时 – 它运行来自.bashrc命令。 (请参阅GNU Bash手册中的6.2 Bash Startup Files 。)

只想进入 – 即使文件隐藏在查看器中,如果只输入文件名,仍然可以打开所有文件。 例如,如果您在dolphin地址栏/home//.bashrc中写入,它将使用默认编辑器打开该文件,而无需切换显示/隐藏某些文件。

其他方法是只打开您喜欢的编辑器,只需输入文件名。

我认为这是处理隐藏文件的最佳方式,因为它显示的不仅仅是添加可以避免的噪音。

和别名应该进入.bashrc,就像geirha写的那样。