Commande source sous Linux

Linux 命令大全Référence des commandes Linux


1. Qu'est-ce que la commande source

source est une commande shell intégrée dans les systèmes Linux/Unix, utilisée pour exécuter les commandes du fichier spécifié dans l'environnement du shell courant. Contrairement à l'exécution directe d'un script, la commande source ne crée pas de nouveau sous-shell ; elle exécute directement le contenu du fichier dans le shell courant.

Analogie pour comprendre

Vous pouvez considérer la commande source comme une opération de « copier-coller » :

  • Exécution normale d'un script : comme envoyer le fichier à quelqu'un d'autre pour qu'il l'exécute (ouverture d'un nouveau terminal)
  • commande source : comme coller directement le contenu du fichier dans votre terminal actuel et l'exécuter

2. Syntaxe de base de la commande source

Exemple

sourcefilename[parameters]

Ou utilisez la notation équivalente point (.) :

Exemple

. filename[parameters]

Description du paramètre

  • filename: Le chemin du fichier de script à exécuter (peut être un chemin relatif ou un chemin absolu)
  • parameters: Facultatif, paramètres passés au script

3. Différence entre la commande source et l'exécution directe d'un script

Élément de comparaison commande source Exécution directe d'un script
Environnement d'exécution Environnement shell actuel Nouvel environnement de sous-shell
Impact sur les variables Modifie les variables d'environnement du shell actuel N'affecte pas l'environnement du shell actuel
Relation entre processus Ne crée pas de nouveau processus Crée un nouveau processus
Impact de exit Si le script contient exit, il quittera le shell actuel Ne quitte que le sous-shell

4. Cas d'utilisation typiques de la commande source

1. Chargement de la configuration des variables d'environnement

Le cas d'utilisation le plus courant est le chargement~/.bashrcou/etc/profilefichiers de configuration tels que :

Exemple

source ~/.bashrc

2. Activation d’un environnement virtuel

Activation d’un environnement virtuel en développement Python :

Exemple

source venv/bin/activate

3. Mise à jour de l’environnement shell actuel

Lorsque vous avez modifié un fichier de configuration mais que vous ne souhaitez pas vous reconnecter :

Exemple

source /etc/profile

4. Développement modulaire de scripts

Divisez un grand script en plusieurs petits fichiers et utilisez source pour les inclure :

Exemple

# Dans le script principal
source utils.sh  # Inclure les fonctions utilitaires
source config.sh # Inclure la configuration

5. Exemples d'utilisation pratiques

Exemple 1 : Chargement de variables d'environnement personnalisées

Créer un fichier de testmyenv.sh:

Exemple

#!/bin/bash
export MY_VAR="Hello World"
alias ll='ls -alF'

Charger avec source :

Exemple

source myenv.sh
echo $MY_VAR  # Sortie : Hello World
ll            # Équivalent à ls -alF

Exemple 2 : Débogage de scripts

Lors du débogage d'un script, vous pouvez utiliser source pour préserver les variables définies dans le script :

Exemple

source debug_script.sh
# Les variables définies dans le script peuvent maintenant être inspectées dans le shell actuel

6. Notes et problèmes courants

  1. Sécurité: source exécute directement le contenu du fichier dans l'environnement courant ; n'utilisez source qu'avec des fichiers de confiance
  2. Recherche de fichier: source utilise le PATH du shell courant pour trouver les fichiers ; il est recommandé d'utiliser un chemin complet
  3. Gestion des erreurs: Si le fichier sourcé contient des erreurs, le shell courant en sera affecté
  4. Problèmes de récursion: Évitez de sourcer à nouveau le fichier lui-même dans un fichier sourcé, car cela peut provoquer une boucle infinie

Erreurs courantes

Exemple

# Erreur : Oublier que le fichier doit avoir les permissions d'exécution
source ./script.sh  # Si script.sh n'est pas lisible

# Erreur : Le fichier n'existe pas
source non_exist_file.sh

7. Comparaison des alternatives

1. source vs export

  • exportDéfinit uniquement des variables
  • sourcePeut exécuter des commandes arbitraires

2. source vs eval

  • evalExécute une chaîne plutôt qu'un fichier
  • sourcePlus sûr, avec une source de fichier claire

Linux 命令大全Référence des commandes Linux

Autres extensions