当前位置: 首页>>技术教程>>正文


在哪里.bash_profile?

,

问题描述

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

最佳解决方案

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

~/.bash_profile

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

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

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

次佳解决方案

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

第三种解决方案

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

第四种方案

你通常在Ubuntu上没有.bash_profilenor should you通常会创建该文件。作为jpezz says,它将位于您的Ubuntu系统的主目录中,这就是~所代表的,您可以在那里创建它。但是如果你这样做,你应该小心,因为它会阻止bash自动运行.profile中的命令 – 你几乎肯定会这样做。

bash runs as a login shell,在WSL或other1中,它运行您的主目录中存在的第一个.bash_profile.bash_login.profile。如果您在登录时要运行bash特定命令 – 但仅当bash是您的shell时 – 您可以将它们放在.bash_profile中。但仅仅存在.bash_profile会阻止使用.profile

那么你想要来自.bash_profilesource .profile,假设你想要运行那些命令,你几乎总是这样。您可以通过将此命令放在.bash_profile中来实现:

. ~/.profile

(有些读者可能习惯于在启动脚本中看到它写成. "$HOME/.profile"。这总是很好 – 你可能更喜欢将它用于需要在bash以外的shell上工作的命令,如果你需要容纳的话不支持standard features的极旧shell,嗯,你不需要它。在任何情况下,bash总是支持tilde expansion,而.bash_profile的点是只有bash运行它的命令,所以. ~/.profile没问题。)

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

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

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


最后,你不应该把别名放在.profile中,.bash_profile也不应该像geirha rightly says那样放在它们的好地方。这是因为您希望别名在交互式shell中工作,无论它们是否是登录shell。相反,在.bashrc或更好的.bash_aliases(如guest boeroe points out)中定义您的别名,默认.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在non-interactive shell中运行,它将在顶部退出而不执行任何操作,因此如果它在non-interactive登录shell和其他更加模糊的场景中由.profile获取,则其中的命令将不会运行2:

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

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


1这个答案最初是为a WSL-related question编写的,但是这个问题已经作为副本关闭了,这个答案也完全适用于此,所以我扩展了一下并在此处发布了它。

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

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/2117.html,未经允许,请勿转载。