扩展.bash_profile的模块化?

时间:2018-03-23 15:39:03

标签: bash

我有两台笔记本电脑 - 一台用于工作,一台用于个人用品。我的每个.bash_profile都有很多相同的功能和别名。但是,我的笔记本电脑.bash_profile上有一些东西在我的个人笔记本电脑上并不存在。

我想知道我是否有办法让他们共享"分享" .bash_profile或其他内容,并将功能扩展到它,以便在笔记本电脑之间分享我的bash内容。

如果重要,我会使用Mac; bash --version == 4.4.19

3 个答案:

答案 0 :(得分:3)

当然可以,使用.bash_profile命令将source分解为模块并不罕见。

从您的问题来看,您的.bash_profile几乎完全相同,但唯一的区别是您的笔记本电脑上有特定工作的东西。解决问题的一种方法是将工作别名,函数,导出等移动到自己的文件中。我们称之为~/.work_profile

然后在~/.bash_profile添加以下内容。 [[ -f ~/.work_profile ]] && source ~/.work_profile

解释:[[ -f ~/.work_profile ]]测试常规文件~/.work_profile是否存在,如果存在则返回true。

&& source ~/.work_profile是合乎逻辑的。如果上一个命令返回true,那么它将运行此部分并获取您的~/.work_profile

答案 1 :(得分:1)

解决方案1:

  1. 将共同内容放入共享.bash_profile
  2. source ~/.bashrc.local 结束时
  3. .bash_profile
  4. 每台笔记本电脑都有自己的.bashrc.local
  5. 解决方案2:在两台笔记本电脑上使用一个.bash_profile

    ... common stuff ...
    
    if [[ -f /a/file/only/on/work/laptop ]]; then
      ... now on work laptop ...
    else
      ... now on home laptop ...
    fi
    

    我有20多个Bash rc文件,所以我真正的解决方案有点复杂:

    1. ~/.bashrc_profile中只有一行:

      source ~/.bashrc
      
    2. 所有系统共享相同的~/.bashrc,逻辑如下:

      # Each system has its own `.bashrc.pre' which defines the
      # var `$RC_DIR' for top dir of all rc files (Bash, Vim, ...).
      #
      # I need to define my own `$RC_DIR' because my coworkers share
      # some servers (using the same accounts) at work.
      source ~/.bashrc.pre
      
      # `rcfiles' is system specific which lists rc files to be
      # loaded on that system. I maintain a `rcfiles.template'.
      for file in $(< $RC_DIR/bash/rcfiles); do
          source $file
      done
      
      # `.bashrc.post' is system specific
      source ~/.bashrc.post
      

答案 2 :(得分:-1)

如果您有root用户,可以在/ etc中使用配置文件,或者使用source filename包含其他(通用)文件。

您可能还想查看解释不同可加载文件的this question