Que fait la ligne d'exportation PATH dans .bashrc?

9

Je ne suis pas tellement sous Linux et j'ai le doute suivant suite à un tutoriel.

Je dois modifier le bashrcfichier. Quels types de paramètres sont contenus dans ce fichier? Je pense que quelque chose est lié à l'environnement du shell bash mais je n'en suis pas si sûr.

Je dois insérer cette ligne:

export PATH=$HOME/.local/bin:$HOME/.local/usr/bin:$PATH

Que fait exactement cette ligne?

Je pense que cette exportdéclaration est utilisée pour créer une nouvelle variable la rendant disponible pour un autre programme.

Mais qu'est-ce que cette ligne exactement? Est PATHle nom de la variable que je définis? Qu'est-ce que c'est $HOME?

Que signifie le :symbole entre PATH=$HOME/.local/binet $HOME/.local/usr/binet $PATHsection dans l'expression précédente?

Que signifie exactement cette expression?

AndreaNobili
la source
Le: entre les éléments est le séparateur pour chaque segment. Sans cela, votre chemin serait un parcours continu et ne fonctionnerait pas.
Terrance
Dans Ubuntu, ce type de PATHmodifications est déjà effectué dans le ~/.profilefichier, il est donc un peu incohérent de faire des choses similaires dans ~/.bashrc. Mieux vaut IMO pour modifier le code déjà ~/.profilesi nécessaire. Actuellement, le ~/.profilefichier par défaut comprend cette ligne:PATH="$HOME/bin:$HOME/.local/bin:$PATH"
Gunnar Hjalmarsson
@GunnarHjalmarsson: Dans certaines situations, les profils .profile et .bashrc sont différents. Le fichier .profile est analysé par les shells de connexion et non par les sous-shells. Mais puisque vous devez vous connecter de toute façon pour démarrer un sous-shell, c'est OK car les sous-shell hériteront de $ PATH. Le fichier .bashrc ne sera pas analysé par le shell de connexion mais sera analysé par les sous-coquilles. La différence vient quand vous avez des choses qui ne sont pas des enfants de shells de connexion (peut-être un script d'automatisation sophistiqué qui appelle d'autres scripts comme git commit hook) - tout ce qui est dans .profile ne sera pas lu, donc il sera ignoré
slebetman
@slebetman: D'accord, et dans le cas d'un bureau, il y a une autre différence que vous ne mentionnez pas: contrairement à ~/.bashrc, elle ~/.profileprovient du gestionnaire d'affichage, donc seules les variables définies par ~/.profilesont disponibles lorsque vous démarrez des programmes à partir de l'environnement graphique. Et cela se produit tôt, donc cela devrait être correct pour les processus démarrés automatiquement pour la session.
Gunnar Hjalmarsson

Réponses:

16

Pour récapituler tout ce qui est mentionné dans cette question,

La exportpartie

La exportligne signifie que la variable que vous déclarez après sera accessible aux processus enfants. En d'autres termes, les processus pourront accéder à la variable déclarée après le exportmot - clé via l'environnement du shell. Donc, si vous avez fait quelque chose comme ça export FOO="BAR"et que vous avez ensuite provoqué les changements dans votre environnement shell, vous pouvez taper $FOOet obtenir BAR.

La PATHpartie

La ligne de chemin est comme vous l'avez dit: elle déclare une variable nommée PATHpour l'environnement shell. Dans l'environnement bash, PATHa un objectif spécial de définir où l'ordinateur recherche les programmes. Cela vous permet de taper des commandes personnalisées pour les scripts sans taper le répertoire complet. Notez que PATH est marqué pour l'exportation par défaut, donc cette ligne n'a pas besoin d'être réécrite. Cela ne fait pas de mal, cependant.

Le $HOMEdans la PATHvariable

Au début du chemin affecté à la PATHvariable, $HOMEest déclaré. Cela signifie que l'ordinateur saisira à peu près la valeur stockée dans HOMEet la copiera-collera devant le reste de la ligne lors de sa lecture.

Le :entre les deux voies

L' :équivalent à une virgule dans les phrases. Il sépare simplement les trois répertoires. Sans ces trois répertoires, la console ne reconnaîtrait pas les commandes qu'elle reçoit. Ces trois emplacements sont les trois répertoires les plus couramment utilisés pour les fichiers de scripts / commandes à stocker et doivent donc être accessibles par le terminal sans avoir à écrire le chemin complet du fichier.

L'intrus
la source
Très bonne réponse! "La ligne d'exportation signifie que la variable que vous déclarez après qu'elle sera accessible aux processus enfants" est le parent de ces processus enfants du terminal à partir duquel j'exécuterai une commande?
vadasambar
5

La PATHvariable permet à bash de savoir où chercher les programmes exécutables, donc si vous avez un script ou un autre fichier exécutable $HOME/.local/bin, la modification PATHvous permettra de taper et d'exécuter ce fichier comme vous le faites avec lsou df.

exportsignifie uniquement que cette PATHvariable est également disponible pour les autres programmes que vous exécutez à partir de bash.

Quant à : , c'est juste un séparateur pour chaque répertoire. C'est la même chose qu'une virgule dans une liste de mots, rien de plus.

Sergiy Kolodyazhnyy
la source