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.
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
.
Renommez $HOME/software
(s'il existe déjà):
mv $HOME/software $HOME/software.old
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.