【问题标题】:How to reload .bash_profile from the command line?如何从命令行重新加载 .bash_profile?
【发布时间】:2011-06-04 05:42:42
【问题描述】:

如何从命令行重新加载.bash_profile

我可以让 shell 通过退出并重新登录来识别对 .bash_profile 的更改,但我希望能够按需进行。

【问题讨论】:

    标签: bash shell command-line


    【解决方案1】:

    只需输入source ~/.bash_profile

    或者,如果您喜欢保存击键,您可以输入. ~/.bash_profile

    【讨论】:

    • alias BASHRELOAD=". ~/.bash_profile" 怎么样。如果您经常这样做,您可以将其别名为br
    • 为什么我每次/会话都需要这样做?我无法让对 .bash_profile 所做的更改持续存在,即使当我在编辑器中打开文件时它们在文件中也是如此。令人困惑。
    • @erwinheiser 您的系统正在加载文件吗?一些系统使用其他文件,例如~/.bashrc。
    • 如果您想知道负载是否出现问题,您可以使用:alias reload='source ~/.bash_profile && echo "File .bash_profile reloaded correctly" || echo "Syntax error, could not import the file"';
    • 对于忘记您切换到 OhMyZsh 的人。运行 open ~/.zshrc 并在那里进行更改而不是您的 .bash_profile
    【解决方案2】:
    . ~/.bash_profile
    

    只要确保你对那里的当前状态没有任何依赖。

    【讨论】:

    • 为什么会这样?即这种情况下.命令是什么?
    • the dot operator: . 只是source 命令的别名。
    • @GrahamPHeath - 严格来说,我认为情况正好相反; .source 早。
    • source. 的 bash 特定实现
    • @StasS - .source 在 bash 中实际上是一回事。来自链接:“source 是 bash 中点/句点 '.' 的同义词,但在 POSIX sh 中不是,因此为了获得最大的兼容性,请使用句点。”
    【解决方案3】:

    您还可以使用此命令为该用户重新加载 ~/.bash_profile。确保使用破折号。

    su - username
    

    【讨论】:

    • 这将在一个shell中调用整个shell,远非理想。其他选项只是重新执行相关文件,这意味着它们 (A) 实际上与所提出的问题相关,并且 (B) 不会堆积 shell 并可能重新加载其他不应该的东西(环境变量等)。有种正确的方法可以彻底替换当前的shell(没有嵌套),但由于这是题外话,我会让感兴趣的读者在别处搜索。
    • 你正在打开另一个shell,这不是重新加载你还不如打开一个新终端或重新登录
    【解决方案4】:
    1. 保存.bash_profile文件
    2. 键入cd 转到用户的主目录
    3. . .bash_profile重新加载配置文件

    【讨论】:

    • cd 回家吧。不需要~
    • 不需要cd - 你可以从你当前所在的目录重新加载它:. ~/.bash_profile
    【解决方案5】:

    简单输入:

    . ~/.bash_profile
    

    但是,如果您希望在终端启动时自动运行它而不是每次打开终端时都运行它,您可以将. ~/.bash_profile 添加到~/.bashrc 文件中。

    注意:

    当您打开终端时,终端会以(非登录)交互模式启动 bash,这意味着它将 source ~/.bashrc

    ~/.bash_profile 仅在 交互式登录模式 启动时由 bash 获取。这通常仅在您登录控制台时(Ctrl+Alt+F1..F6),或通过ssh连接。

    【讨论】:

      【解决方案6】:

      alias bashs="source ~/.bash_profile" 添加到您的 bash 文件中。 所以下次你可以拨打bashs

      【讨论】:

      • 我将其别名为 reset -- 更容易记住
      【解决方案7】:

      如果 .bash_profile 不存在,您可以尝试运行以下命令:

      . ~/.bashrc 
      

       source ~/.bashrc
      

      而不是 .bash_profile。 你可以找到更多关于bashrc的信息

      【讨论】:

        【解决方案8】:

        我喜欢这样一个事实,即在您刚刚编辑完文件后,您所需要做的就是输入:

        . !$
        

        这会获取您刚刚在历史记录中编辑的文件。见What is bang dollar in bash

        【讨论】:

          【解决方案9】:

          我使用 Debian,我可以简单地输入 exec bash 来实现这一点。我不能说它是否适用于所有其他发行版。

          【讨论】:

          • 这在 Mac 中不起作用(至少在我使用的版本 - Sierra 中不起作用),因为这样做会执行不运行 .bash_profile 的无登录 shell
          • @Ulukai 显然只需在 Mac 上的主目录中输入 . .bash_profile 即可完成这项工作。与上面 7urkm3n 的回复相同。
          【解决方案10】:

          我正在运行 Sierra,并为此工作了一段时间(尝试了所有推荐的解决方案)。我变得困惑,所以最终尝试重新启动我的电脑!成功了

          我的结论是有时需要硬重置

          【讨论】:

          • 迈克是的,硬重置将起作用,因为所有内容都会重新加载。只要您所做的更改有效,它将在下次启动时生效。但是,您可以更轻松地挖掘一下以找到仅刷新 bash 的命令/方法,而不必一直这样做。有一种方法可以在不重新启动的情况下实现它,这当然会花费太多时间来查看最新的更改是否有效!也许看看osxdaily.com/2016/06/07/…
          • 是的,我尝试了缩写和完整命令来重新加载 bash 配置文件/路径。它没有用,只能注销并重新登录。奇怪的
          【解决方案11】:

          我想发布一个快速答案,即在使用 source ~/.bash_profile 或上述答案有效时,需要提及的一件事是,这只会在您正在查看的当前选项卡或会话中重新加载您的 bash 配置文件。如果您希望在每个选项卡/shell 上重新加载 bash 配置文件,则需要在每个选项卡/shell 中手动输入此命令。

          如果您使用iTerm, you can use CMD⌘+Shift+I to enter a command into all current tabs。对于终端,引用此issue 可能很有用;

          【讨论】:

            【解决方案12】:
            alias reload!=". ~/.bash_profile"
            

            或者如果想通过函数添加日志

            function reload! () {
                echo "Reloading bash profile...!"
                source ~/.bash_profile
                echo "Reloaded!!!"
            }
            

            【讨论】:

            • 不,这是您的偏好。如果想添加一些显示状态的额外打印行,而不是简单地去 . ~/. bash_profile source ~/.bash_profile
            【解决方案13】:

            你只需要输入. ~/.bash_profile

            参考:https://superuser.com/questions/46139/what-does-source-do

            【讨论】:

              【解决方案14】:

              如果您不介意丢失当前 shell 终端的历史记录,您也可以这样做

              bash -l

              这将分叉你的 shell 并打开另一个 bash 子进程。 -l 参数告诉 bash 作为登录 shell 运行,这是必需的,因为 .bash_profile 不会作为非登录 shell 运行,有关此read here 的更多信息

              如果你想完全替换当前的 shell 你也可以这样做:

              exec bash -l

              上面的代码不会派生你当前的shell,而是完全替换它,所以当你输入exit时,它会完全终止,而不是让你回到以前的shell。

              【讨论】:

              • 如果您使用 iterm2,您不会丢失您的历史记录
              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2018-10-08
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多