5 votes

<commande source sous Linux>

Ma question est :
pourquoi si j'exécute un fichier avec le nom d'alias par exemple avec le contenu suivant :

alias lsa="ls -a" 

directement :

$ ./aliases

il ne crée pas l'alias (peut-être seulement dans le contexte du script).
Mais si je l'exécute avec la commande "source" :

$ source aliases

ça fonctionne ? Je veux dire, après l'exécution, l'alias "lsa" existe dans le contexte de l'interpréteur de commandes ?
"man source" donne : "Aucune entrée de manuel pour source", et sur Google j'ai seulement trouvé que cela exécute Tcl, mais pourquoi Tcl influence le contexte de l'interpréteur de commandes et pas bash ?

7voto

m4573r Points 5441

Fondamentalement, lorsque vous exécutez ./aliases, cela crée un processus dans lequel vos alias existent mais se termine immédiatement après, alors que lorsque vous le source, il s'applique à votre processus bash actuel.

Pour obtenir de l'aide sur source, vous devez lire le man bash. Pour vous éviter des ennuis:

source nom_fichier [arguments]
    Lit et exécute les commandes du fichier dans l'environnement shell actuel
    et renvoie le statut de sortie de la dernière commande exécutée à partir du fichier.
    Si le nom_fichier ne contient pas de slash, les noms de fichiers dans le PATH sont utilisés pour trouver
    le répertoire contenant le fichier. Le fichier recherché dans le PATH n'a pas besoin
    d'être exécutable. Lorsque bash n'est pas en mode posix, le répertoire actuel est
    parcouru si aucun fichier n'est trouvé dans le PATH. Si l'option sourcepath de la commande intégrée shopt
    est désactivée, le PATH n'est pas recherché. Si des arguments sont fournis,
    ils deviennent les paramètres positionnels lorsque le fichier est
    exécuté. Sinon, les paramètres positionnels restent inchangés. Le retour
    statut est le statut de la dernière commande exécutée dans le script (0 si
    aucune commande n'est exécutée), et false si le fichier n'est pas trouvé ou ne peut pas
    être lu.

5voto

Nicole Hamilton Points 9675

Lorsque vous l'exécutez en tant que script exécutable, l'interpréteur de commandes crée une copie de lui-même en tant que processus enfant pour exécuter le script. Cela signifie que toute modification apportée aux alias :

  • ne sera visible que par cet enfant.
  • est perdue dès que l'enfant se termine.

En revanche, lorsque vous source le script :

  • Il est exécuté dans le même processus (comme si vous aviez simplement tapé son contenu)
  • Les modifications apportées aux alias sont conservées.

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