web-dev-qa-db-fra.com

Recharger .bashrc après avoir défini des variables - Script Shell

J'ai un script simple qui met en place un référentiel CVS (et d'autres choses) pour le travail. Le script a une fonction qui devrait configurer le référentiel, mais il ne recharge pas correctement .bashrc. Le code est comme suit:

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

<other code>
setupCVS

Cela permettra à l'utilisateur d'exécuter le script et de pouvoir immédiatement se connecter au cvs et télécharger le code. Le problème est que le script ne ressource pas .bashrc. J'ai essayé d'utiliser

exec bash

et

. ~/.bashrc

mais je reçois toujours un message du terminal disant que CVSRoot n'est pas défini lorsqu'il atteint

cvs login

Des idées? J'utilise Ubuntu 14.04 si cela est nécessaire.

1
Blake Ordway

Un certain nombre de choses:

  • Le défaut .bashrc ne fait rien si le shell n'est pas interactif:

    # If not running interactively, don't do anything
    case $- in
        *i*) ;;
          *) return;;
    esac
    
  • Votre script utilise /bin/sh. Ne source pas .bashrc. Tout élément spécifique à bash pourrait provoquer des problèmes. Et comme le note le conducteur d'acier, /bin/sh n'a pas source:

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

Pourquoi ne pas simplement export la variable en plus d'ajouter à .bashrc?

5
muru