web-dev-qa-db-ja.com

変数を設定した後の.bashrcのリロード-シェルスクリプト

作業用の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

これにより、ユーザーはスクリプトを実行し、すぐにCVSにログインしてコードをダウンロードできるようになります。問題は、スクリプトが.bashrcをリソース化しないことです。私は使ってみました

exec bash

そして

. ~/.bashrc

それでもCVSRootが設定されていないというターミナルメッセージが表示されます

cvs login

何か案は?必要な場合は、Ubuntu 14.04を使用しています。

1
Blake Ordway

いくつかのこと:

  • シェルがインタラクティブでない場合、デフォルトの.bashrcは何もしません。

    # If not running interactively, don't do anything
    case $- in
        *i*) ;;
          *) return;;
    esac
    
  • スクリプトは/bin/shを使用しています。 .bashrcを入手しないでください。 bash固有のものは問題を引き起こす可能性があります。そして、steeldriverのメモとして、/bin/shにはsourceがありません:

    $ sh -c 'source ~/.bashrc'
    sh: 1: source: not found
    

.bashrcに追加するだけでなく、変数をexportにしないのはなぜですか?

5
muru