web-dev-qa-db-fra.com

Changer la valeur de $ HOME dans .bashrc

Tout d'abord un peu de contexte. Je m'excuse par avance pour l'utilisation abusive de la terminologie. S'il vous plaît corrigez-moi si nécessaire.

Pour mon travail, je vais exécuter des simulations à distance via SSH sur plusieurs machines Ubuntu. Ces machines sont en réseau et mon compte est lié à toutes les machines, c.-à-d. $HOME est /home/links/Ogaday et est mis en miroir sur chaque ordinateur. Je crée donc un répertoire sur une machine de ce dossier et il apparaît sur une autre machine (dans ce cas, je ne sais pas comment utiliser les termes corrects). Il existe également une mémoire locale sur chaque machine, accessible par chaque utilisateur de cette machine, appelée /scratch/. Je vais créer un répertoire dans /scratch/ pour y effectuer mon travail car je ne pense pas disposer de suffisamment de mémoire sur mon compte pour exécuter les simulations dans $ HOME. Ce sera plus rapide car tout est local. présumer.

Maintenant, il y a un logiciel installé sur ces machines que je dois utiliser, et il est installé dans des répertoires auxquels je n'ai pas accès en écriture (/usr/local/software/). Cependant, ce logiciel a un script bash qui définit les variables d'environnement. Je suis censé ajouter le script bash (source /usr/local/software/etc/bashrc) à $HOME/.bashrc afin de définir les variables d'environnement nécessaires. Joli standard jusqu'à présent, tout est configuré pour que ce logiciel s'exécute lorsque je me connecte, n'est-ce pas? Maintenant, je pense que le logiciel sur ces ordinateurs n’a pas été configuré correctement, car le .../etc/bashrc est supposé définir une variable appelée $SOFTWARE_INST_DIR, le répertoire d’installation. Par défaut, il s’agit de $HOME/software et il est nécessaire de modifier ce fichier bashrc pour qu’il soit plutôt défini sur /usr/local/software. Bien sûr, je n’ai pas d’accès en écriture à .../etc/bashrc. Il y a d'autres problèmes similaires, c'est juste la chose qui échoue en premier.

Pour résoudre ce problème, j'ai copié ce fichier dans $HOME/software-etc/bashrc et ajouté source $HOME/software-etc/bashrc à $HOME/.bashrc au lieu d'ajouter source /usr/local/software/etc/bashrc, afin de pouvoir modifier les variables qu'il attribue. Y at-il quelque chose de fondamentalement faux avec cela? Au lieu de copier le fichier bashrc depuis l’emplacement d’installation du logiciel, j’ai pensé qu’une autre solution serait d’ajouter export $HOME=/scratch/ogaday à .bashrc, ce qui, je suppose, réaffecterait mon répertoire personnel à zéro. Ai-je raison? Est-ce dangereux? Je n'utiliserais pas vraiment ces machines pour autre chose que de faire de longues simulations sur elles.

ps: La solution finale serait de demander aux informaticiens de se renseigner, je suppose! Je préférerais faire une solution rapide si cela est possible.

3
Ogaday

Non, il n'y a rien de mal à copier le fichier rc ailleurs. Cela dit, bien que vous puissiez changer votre $HOME en ajoutant HOME=/foo à l’un des fichiers lus au démarrage (~/.profile, par exemple), ce n’est vraiment pas une bonne idée. HOME est utilisé par beaucoup de choses, pas seulement par vos scripts et il n'y a aucune raison de le changer car cela peut avoir des conséquences imprévues.

Par exemple, les fichiers de configuration par défaut pour divers programmes, y compris votre shell, sont stockés dans $HOME. Si vous changez cela, vos paramètres seront perdus.

Maintenant, si je comprends bien, votre objectif principal ici est de faire pointer $HOME/software vers /usr/local/software. Au lieu de copier des fichiers, la solution la plus simple serait de faire de $HOME/software un lien pointant vers /usr/local/software.

  1. Renommez $HOME/software (s'il existe déjà):

    mv $HOME/software $HOME/software.old
    
  2. Créez un lien appelé $HOME/software qui pointe sur /usr/local/software:

    ln -s /usr/local/software $HOME/software
    

Désormais, tout ce qui recherche $HOME/software trouvera réellement /usr/local/software à la place.

De même, afin de faire votre travail localement sur chaque machine, créez le répertoire dans /scratch puis reliez-le à votre $HOME:

mkdir /scratch/ogaday
ln -s /scratch/ogaday $HOME/work

Maintenant, tout ce que vous ferez dans $HOME/work se produira réellement dans /scratch/ogaday.

Enfin, gardez à l'esprit qu'il existe différents types de Shell. Lorsque vous vous connectez via ssh, vous exécutez un shell de connexion interactif et, sur de nombreux systèmes, $HOME/.bashrc est ignoré par ces shells. Bien qu'Ubuntu lise spécifiquement $HOME/.bashrc, de nombreuses autres distributions ne le font pas. Par conséquent, il est préférable d'utiliser $HOME/.profile et non $HOME/.bashrc pour définir les variables d'environnement. Voir ici pour une explication des fichiers lus quand.

4
terdon