3 votes

Changer la valeur de $HOME dans .bashrc

Tout d'abord, un peu de contexte. Je m'excuse d'avance pour l'utilisation abusive de la terminologie. Veuillez me corriger 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. $HOME es /home/links/Ogaday et est mis en miroir sur chaque machine. Ainsi, je crée un répertoire sur une machine dans ce dossier, et il apparaît sur une autre machine (c'est un cas où je ne sais pas comment utiliser les termes corrects). Il existe également une mémoire locale sur chaque machine, accessible par chaque utilisateur sur cette machine, appelée /scratch/ . Je vais créer un répertoire dans /scratch/ pour faire mon travail réel, parce que je ne pense pas avoir assez de mémoire sur mon compte pour exécuter les simulations dans $HOME, et ce sera plus rapide parce que tout est local, je suppose.

Or, il y a des logiciels installés sur ces machines que je dois utiliser, et ils sont installés dans des répertoires auxquels je n'ai pas accès en écriture ( /usr/local/software/ ). Cependant, ce logiciel possède un bash script qui définit les variables d'environnement. Je suis censé ajouter le script de bash ( source /usr/local/software/etc/bashrc ) à $HOME/.bashrc afin de définir les variables d'environnement nécessaires. Jusqu'à présent, c'est plutôt standard, cela configure tout 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, parce que les variables d'environnement de l'ordinateur ne sont pas configurées. .../etc/bashrc est censé 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 le fichier bashrc pour qu'il prenne la valeur suivante /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.

Comme solution, j'ai copié ce fichier dans $HOME/software-etc/bashrc et ajouté source $HOME/software-etc/bashrc a $HOME/.bashrc au lieu d'ajouter source /usr/local/software/etc/bashrc afin que je puisse modifier les variables qu'il assigne. Y a-t-il quelque chose de fondamentalement erroné ? J'ai pensé qu'une autre solution serait, au lieu de copier le fichier bashrc depuis l'emplacement d'installation du logiciel, de rajouter export $HOME=/scratch/ogaday à .bashrc, ce qui, je suppose, réassignerait mon répertoire personnel à scratch. Ai-je raison ? Est-ce dangereux ? Je n'utiliserais pas vraiment ces machines pour autre chose que l'exécution de longues simulations.

ps : La solution finale serait de demander aux informaticiens de s'en occuper, je suppose ! Je préférerais cependant faire une réparation rapide si c'est possible.

4voto

Stewart Points 1385

Non, il n'y a rien de mal à copier le fichier rc ailleurs. Cela dit, si vous pouvez effectivement modifier votre $HOME en ajoutant HOME=/foo vers 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 vos scripts et il n'y a aucune raison de le changer puisque cela peut avoir des conséquences involontaires.

Par exemple, les fichiers de configuration par défaut pour une variété de 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 principal objectif ici est d'avoir $HOME/software pointer 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. Renommer $HOME/software (s'il existe déjà) :

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

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

Maintenant, tout ce qui cherche $HOME/software trouvera en fait /usr/local/software à la place.

De même, afin de faire votre travail localement sur chaque machine, créez le répertoire en /scratch et le lier ensuite à votre $HOME :

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

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

Enfin, n'oubliez pas qu'il existe différents types de Shell. Lorsque vous vous connectez via ssh , vous exécutez un login interactif Shell et, sur de nombreux systèmes, $HOME/.bashrc est ignoré par ces shells. Bien que Ubuntu lise spécifiquement aussi $HOME/.bashrc pour de tels shells, beaucoup d'autres distributions ne le font pas. Par conséquent, il est plus sûr d'utiliser $HOME/.profile et non $HOME/.bashrc pour définir les variables d'environnement. Voir ici pour une explication de quels fichiers sont lus et quand.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X