.bash_profile 在哪里?

Shi*_*ira 58 bash

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

Lek*_*eyn 55

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

~/.bash_profile
Run Code Online (Sandbox Code Playgroud)

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

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

如果您将 Kubuntu 与 Dolphin 一起使用,则必须按Ctrl+.来切换文件的可见性。

  • 键 Ctrl-H 也可以切换显示/隐藏隐藏文件。 (3认同)

gei*_*rha 15

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


Eli*_*gan 9

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

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

因此,假设您也希望运行这些命令,那么您可能希望从 中获取源代码 ,而您几乎总是会这样做。您可以通过将此命令放入:.profile.bash_profile.bash_profile

. ~/.profile
Run Code Online (Sandbox Code Playgroud)

(一些读者可能习惯于看到. "$HOME/.profile"它出现在启动脚本中时那样写。这总是好的——bash如果你需要适应非常旧的不支持标准功能的外壳,这 - 好吧,你不需要那个。无论如何,bash总是支持波浪号扩展,重点.bash_profile是只bash运行它的命令,所以. ~/.profile很好。)

.内置源文件,这是说,它运行所有从当前shell文件中的命令。打开交互式bashshell 并运行help .以获取更多信息。

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

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


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

.profile如果您是以下情况,默认文件将检查您是否正在运行bashshell 和源代码.bashrc

. ~/.profile
Run Code Online (Sandbox Code Playgroud)

同时,.bashrc如果它在非交互式 shell 中运行,默认值将在顶部退出而不做任何事情,因此如果它.profile非交互式登录 shell 和其他更模糊的场景中获取源代码,则其中的命令将不会运行2

# if running bash
if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f "$HOME/.bashrc" ]; then
    . "$HOME/.bashrc"
    fi
fi
Run Code Online (Sandbox Code Playgroud)

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


1此答案最初是为WSL 相关问题编写的,但该问题已作为副本关闭,此答案也完全适用于此处,因此我进行了一些扩展并将其发布在此处。

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


小智 5

将所有别名放在~/.bash_aliases用户主目录中会很方便。这就是~/.bashrc评论中文件中的建议。