设置变量后重新加载 .bashrc -- shell 脚本

Bla*_*way 2 command-line bash scripts 14.04

我有一个简单的脚本,可以为工作设置 CVS 存储库(和其他东西)。该脚本有一个函数应该设置存储库,但它没有正确地重新加载 .bashrc。代码如下:

#!/bin/sh
setupCVS()
{
   echo '#Environment variables' >> ~/.bashrc
   echo 'export CVSROOT=:<server path>' >> ~/.bashrc
   source ~/.bashrc
   cvs login
   cvs co <directories>
}

<other code>
setupCVS
Run Code Online (Sandbox Code Playgroud)

这将允许用户运行脚本并立即能够登录到 cvs 并下载代码。问题是脚本没有资源 .bashrc。我试过使用

exec bash
Run Code Online (Sandbox Code Playgroud)

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

但我仍然收到一条终端消息,说 CVSRoot 到达时未设置

cvs login
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?如果有必要,我正在使用 Ubuntu 14.04。

mur*_*uru 6

几件事:

  • .bashrc如果 shell 不是交互式的,则默认值不执行任何操作:

    # If not running interactively, don't do anything
    case $- in
        *i*) ;;
          *) return;;
    esac
    
    Run Code Online (Sandbox Code Playgroud)
  • 您的脚本正在使用/bin/sh. 不要来源.bashrc。任何特定于 bash 的东西都可能导致问题。正如 steeldriver 指出的那样,/bin/sh没有source

    $ sh -c 'source ~/.bashrc'
    sh: 1: source: not found
    
    Run Code Online (Sandbox Code Playgroud)

export除了添加到之外,为什么不只是变量.bashrc