5 votes

Please provide the HTML tags for me to properly translate the text from English to French.

Ma question est:
pourquoi si je lance un fichier avec le nom aliases par exemple avec un contenu tel que:

alias lsa="ls -a" 

directement:

$ ./aliases

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

$ source aliases

cela fonctionne? Je veux dire après l'exécution l'alias "lsa" existe dans le contexte du shell de commande?
"man source" donne: "No manual entry for source", et sur Google j'ai juste trouvé que cela exécute Tcl, mais pourquoi Tcl influence le contexte du shell et pas bash?

7voto

m4573r Points 5441

Fondamentalement parce que 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 sourcez, il s'applique à votre processus bash actuel.

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

source nom_fichier [arguments]
    Lit et exécute les commandes depuis le fichier nom_fichier dans l'environnement shell actuel
    et renvoie le statut de sortie de la dernière commande exécutée depuis le fichier.
    Si nom_fichier ne contient pas de slash, les noms de fichiers dans PATH sont utilisés pour trouver
    le répertoire contenant nom_fichier. Le fichier recherché dans PATH n'a pas besoin
    d'être exécutable. Lorsque bash n'est pas en mode posix, le répertoire courant est
    recherché si aucun fichier n'est trouvé dans 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 nom_fichier est
    exécuté. Sinon, les paramètres positionnels restent inchangés. Le retour
    status 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 nom_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, le shell crée une copie de lui-même en tant que processus enfant pour exécuter le script. Cela signifie que tout changement apporté aux alias :

  • Ne sera vu que par cet enfant.
  • Sont perdus 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 changements apportés aux alias sont conservés.

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