Bash:更新文件,并在.bashrc中引用它

Bash:更新文件,并在.bashrc中引用它,bash,file,Bash,File,我目前正在主持一个Github项目,该项目修改了~/.bashrc文件。随着项目不断更新,我需要知道如何更新~/.bashrc文件而不完全破坏它。作为一种常见的礼貌,为了避免混淆,我从 ########## Added by Bash-Shortcuts ########## 以 ######### End. https://github.com/OoLunar/Bash-Shortcuts/ ########## 不太清楚该怎么做,想法 编辑: 我最终使用了@reichhart的答案,并添

我目前正在主持一个Github项目,该项目修改了~/.bashrc文件。随着项目不断更新,我需要知道如何更新~/.bashrc文件而不完全破坏它。作为一种常见的礼貌,为了避免混淆,我从

########## Added by Bash-Shortcuts ##########

######### End. https://github.com/OoLunar/Bash-Shortcuts/ ##########
不太清楚该怎么做,想法

编辑: 我最终使用了@reichhart的答案,并添加了一行:

test -r ~/.Bash-Shortcuts/.commandsrc && . ~/.Bash-Shortcuts/.commandsrc

这完美地解决了我的问题。

解决方法:sed或其他就地流程

这里可能存在的问题是:修改.bashrc的进程可能会崩溃,然后.bashrc可能会被破坏

更好的解决方案方法:
源文件
外部文件。

假设:应用程序被称为
myapplication
,它以用户
user123
的身份运行。主目录位于
/home
下方,例如Linux(macOS:
/Users
)上的主目录

  • 创建文件
    ~user123/.myapplicationrc
    (解析为
    /home/user123/.myapplicationrc
    )。将应用程序的所有命令/配置放在此处。使其至少可读
    user123
    (不需要执行位)
  • 将这一行添加到
    ~user123/.bashrc
    (is
    /home/user123/.bashrc
    )——最好在文件末尾:
    test-r~/.myapplicationrc&.~/。myapplicationrc
    (一个点,一个空格,然后是文件名。)
  • 可选:在安装代码上,检查
    .bashrc
    中是否存在该行,如果出现错误,则添加该行:
    fgrep-q.myapplicationrc~user123/.bashrc | echo'test-r~/.myapplicationrc&.~/。myapplicationrc'>>~user123/.bashrc
  • 更多详情:


    编辑:使用
    ~
    而不是
    /home/…
    。这种“瓷砖扩展”在旧的伯恩或传家宝外壳中不起作用。但所有现代外壳(包括像Almquist Shell这样的小外壳)都支持它。在macOS上,它也可以正常工作,但解析为
    /Users/..

    不是问题的直接答案,但为什么不使用
    source
    向.bashrc文件添加新命令呢?我甚至不知道这一点。我真的认为源代码只是将配置重新加载到系统中的一件事。。。我将进一步了解详细信息。查看
    sed
    。始终避免自动更改配置文件。这就是为什么您经常会发现
    /etrc/xxxx.d
    目录作为配置目录,其中包含所有文件。在这里,您可以使用类似于
    .myapplicationrc
    的内容,并从.bashrc中包含此内容。通过这样做,您只需从头开始创建
    .myapplicationrc
    ,而不会有破坏
    .bashrc
    的风险。请参阅:在步骤2中,我建议使用
    [-e“$HOME/.myapplicationrc”]&&。“$HOME/.myapplicationrc”
    ——这样它就没有硬编码的路径,如果有人在那里删除,它将彻底失败。myapplicationrc文件。它不打算使用
    PATH
    HOME
    作为依赖项,因为我对该应用程序一无所知。在我手头的一些服务器上,有一些应用程序具有简化的环境(例如
    env-I
    )。但是我会接受你的建议,我会添加
    test-r
    作为检查。对你的评论投了赞成票。谢谢。@reichhart嗯,我还担心文件(和主目录)会被移动和重命名,我喜欢写东西,这样它们就可以很好地抵御这种情况。折衷一下如何:bash(但不是所有其他shell)将扩展到主路径,即使没有定义
    $home
    (尝试
    env-ibash-c'echo~”
    ),所以
    test-r~/。myapplicationrc&&~/myapplicationrc
    应该在这两种情况下都能工作。