GNU/Linux >> Tutoriels Linux >  >> Linux

Importer des fonctions et des variables dans Bash avec la commande source

Lorsque vous vous connectez à un shell Linux, vous héritez d'un environnement de travail spécifique. Un environnement , dans le contexte d'un shell, signifie que certaines variables sont déjà définies pour vous, ce qui garantit que vos commandes fonctionnent comme prévu. Par exemple, la variable d'environnement PATH définit où votre shell recherche les commandes. Sans cela, presque tout ce que vous essayez de faire dans Bash échouerait avec une commande introuvable Erreur. Votre environnement, bien qu'essentiellement invisible pour vous lorsque vous effectuez vos tâches quotidiennes, est d'une importance vitale.

Il existe de nombreuses façons d'affecter votre environnement shell. Vous pouvez apporter des modifications dans les fichiers de configuration, tels que ~/.bashrc et ~/.profile , vous pouvez exécuter des services au démarrage et vous pouvez créer vos propres commandes personnalisées ou créer des scripts pour vos propres fonctions Bash.

Ajouter à votre environnement avec la source

Bash (avec quelques autres shells) a une commande intégrée appelée source . Et voici où cela peut prêter à confusion :source remplit la même fonction que la commande . (oui, ce n'est qu'un seul point), et ce n'est pas la même source comme Tcl commande (qui peut apparaître sur votre écran si vous tapez man source ). Le source intégré la commande n'est pas dans votre PATH du tout, en fait. C'est une commande qui fait partie de Bash, et pour obtenir plus d'informations à ce sujet, vous pouvez taper help source .

Le . La commande est compatible POSIX. Le source La commande n'est pas définie par POSIX mais est interchangeable avec le . commande.

En savoir plus sur Bash

  • Aide-mémoire de Bash
  • Une introduction à la programmation avec Bash
  • Guide de l'administrateur système sur les scripts Bash
  • Derniers articles sur Bash

Selon Bash help , le source La commande exécute un fichier dans votre shell actuel. La clause "dans votre shell actuel" est significative, car cela signifie qu'il ne lance pas de sous-shell ; donc, tout ce que vous exécutez avec source se produit à l'intérieur et affecte votre courant environnement.

Avant d'explorer comment source peut affecter votre environnement, essayez source sur un fichier de test pour s'assurer qu'il exécute le code comme prévu. Tout d'abord, créez un script Bash simple et enregistrez-le dans un fichier appelé hello.sh :

#!/usr/bin/env bash
echo "hello world"

Utiliser source , vous pouvez exécuter ce script même sans définir le bit exécutable :

$ source bonjour.sh
bonjour le monde

Vous pouvez également utiliser le . intégré commande pour les mêmes résultats :

$ . hello.sh
bonjour le monde

Le source et . les commandes exécutent avec succès le contenu du fichier de test.

Définir des variables et des fonctions d'importation

Vous pouvez utiliser source pour "importer" un fichier dans votre environnement shell, tout comme vous pourriez utiliser le include mot-clé en C ou C++ pour référencer une bibliothèque ou le import mot-clé en Python pour apporter un module. C'est l'une des utilisations les plus courantes de source , et c'est une inclusion par défaut courante dans .bashrc fichiers vers source un fichier appelé .bash_aliases afin que tous les alias personnalisés que vous définissez soient importés dans votre environnement lorsque vous vous connectez.

Voici un exemple d'importation d'une fonction Bash. Tout d'abord, créez une fonction dans un fichier appelé myfunctions . Cela imprime votre adresse IP publique et votre adresse IP locale :

fonction myip() {
        curl http://icanhazip.com      

        adresse IP | grep inet$IP | \
        coupe -d"/" -f 1 | \
        grep -v 127\.0 | \
        grep -v \:\:1 | \
        awk '{$1=$1};1'
}

Importez la fonction dans votre shell :

$ source myfunctions 

Testez votre nouvelle fonction :

$ myip
93.184.216.34
inet 192.168.0.23
inet6 fbd4:e85f:49c:2121:ce12:ef79:0e77:59d1
inet 10.8.42.38

Rechercher la source

Lorsque vous utilisez source dans Bash, il recherche dans votre répertoire actuel le fichier que vous référencez. Cela ne se produit pas dans tous les shells, alors consultez votre documentation si vous n'utilisez pas Bash.

Si Bash ne trouve pas le fichier à exécuter, il recherche votre PATH Au lieu. Encore une fois, ce n'est pas la valeur par défaut pour tous les shells, alors vérifiez votre documentation si vous n'utilisez pas Bash.

Ce sont deux fonctionnalités pratiques intéressantes dans Bash. Ce comportement est étonnamment puissant car il vous permet de stocker des fonctions communes dans un emplacement centralisé sur votre disque, puis de traiter votre environnement comme un environnement de développement intégré (IDE). Vous n'avez pas à vous soucier de l'endroit où vos fonctions sont stockées, car vous savez qu'elles se trouvent dans votre équivalent local de /usr/include , donc peu importe où vous vous trouvez lorsque vous les recherchez, Bash les trouve.

Par exemple, vous pouvez créer un répertoire appelé ~/.local/include comme zone de stockage pour les fonctions courantes, puis placez ce bloc de code dans votre .bashrc fichier :

for i in $HOME/.local/include/* ;
  do source $i
done

Cela "importe" tout fichier contenant des fonctions personnalisées dans ~/.local/include dans votre environnement shell.

Bash est le seul shell qui recherche à la fois le répertoire courant et votre PATH lorsque vous utilisez soit le source ou le . commande.

Utiliser la source pour l'open source

Utiliser source ou . exécuter des fichiers peut être un moyen pratique d'affecter votre environnement tout en conservant la modularité de vos modifications. La prochaine fois que vous songez à copier et coller de gros blocs de code dans votre .bashrc , envisagez de placer des fonctions ou des groupes d'alias associés dans des fichiers dédiés, puis utilisez source pour les ingérer.


Linux
  1. Entrer dans les mauvaises herbes avec Buildah :La commande buildah unshare

  2. La commande "eval" dans Bash ?

  3. Comment enregistrer chaque commande tapée dans bash et chaque opération de fichier ?

  4. Commande bash alias avec guillemets simples et doubles

  5. '&&' vs '&' avec la commande 'test' dans Bash

Commande de source bash

Commande de sortie Bash et codes de sortie

Les commandes alias et unalias expliquées avec des exemples

Différence entre la définition de variables bash avec et sans exportation

Qu'est-ce que la commande source sous Linux et comment ça marche ?

En utilisant l'historique bash pour obtenir une commande précédente, copiez-la, puis "exécutez-la", mais avec la commande commentée