Absolument pas une question stupide! Découvrez ceci (d'abord), puis ceci et cela .
Emanuel Berg
Réponses:
7
Votre terminal exécute un shell (très probablement bash), qui est celui qui demande vos commandes et les exécute.
Outre ce mode interactif, vous pouvez également utiliser votre shell pour exécuter des commandes à partir d'un fichier. Pour exécuter les commandes dans votre fichier, vous pouvez soit appeler le shell directement comme bash scriptou vous pouvez démarrer votre fichier avec un "shebang" #!/bin/bashet le rendre exécutable ( chmod +x script). Ensuite, vous pouvez traiter le script comme un binaire et l'exécuter par exemple comme ./scriptou le placer à un endroit où le shell le recherche. ( echo $PATH)
Votre shell interactif et le shell utilisé pour fonctionner le sont probablement bash. Du point de vue d'un "premier jour d'apprentissage linux", bash fonctionne exactement de la même manière dans les deux modes. - Beaucoup plus tard, vous pourriez tomber sur de légères différences. Si vous voulez vraiment en savoir plus, je vous suggère de lire man bashet de rechercher des endroits mentionnant "interactif". (Vous pouvez rechercher une page de manuel en appuyant sur /.)
Une chose importante à noter est que le script est exécuté comme un nouveau processus. Cela signifie notamment que les variables définies dans le script ne sont pas visibles dans le shell appelant.
$ export a=1
$ echo $a
1
$ bash -c 'echo $a;a=2;echo $a' # change the value in a script
1
2
$ echo $a # value not changed here
1
$
Sans l'exportation an'est même pas visible pour le script interne.
En général, la réponse serait "non", les commandes en shell sont les mêmes dans les scripts, en syntaxe et en sémantique.
Mais il y a un tas de petites nuances liées à la configuration de l'environnement (quelles variables sont utilisées et à quoi elles sont définies).
le shell interactif de choix pour Linux est bash, mais les scripts utilisent souvent d'autres interprètes ( sh, qui est un prédécesseur de bash, kshqui est comparable à bash), vous devez donc prendre en compte le shell utilisé (le nom du shell actuel est traditionnellement tenu en variable SHELL, essayez de taper echo $SHELL).
il peut y avoir des différences dans la configuration du même interpréteur pour la session interactive et pour l'exécution du script.
Non. Un script est une liste de commandes que vous pouvez taper dans le terminal.
Vous pouvez coller la totalité d'un script dans le terminal, et le résultat sera le même que l'exécuter.
Inversement, vous pouvez "enregistrer" vos commandes de terminal à l'intérieur d'un fichier et le transformer en un script réutilisable et le partager avec votre famille et vos amis.
Non. Coller le contenu équivaut à trouver le script. Cela changera toutes sortes d'options dans le shell actuel, qui ne seraient pas modifiées en exécutant simplement le script.
michas
vous avez raison. mais en ce qui concerne ses questions. Je pense que nous pouvons dire que c'est assez similaire. mais oui, pour traduire ce que les michas ont dit en termes noob'er. coller le contenu du script équivaut à faire source script_file. qui modifiera les vars ENV dans le contexte actuel. lors de l'exécution du script car ./script_filene modifiera pas l'ENV, sauf s'il exportest utilisé explicitement.
Mathieu J.
1
Non. Même avec, exportil n'est pas possible pour un script de modifier les variables du shell appelant. Il en va de même pour des choses comme PWD, des alias définis, des fonctions et des choses comme ça. Ils ne peuvent être modifiés que de manière interactive ou en recherchant un fichier. Mais oui, ce n'est probablement rien que quelqu'un trébuchera le premier jour. :)
michas
1
@michas: Eh bien, il vaut toujours mieux donner la bonne description. Si le débutant est ambitieux et a des habitudes de travail, il reprendra rapidement. Si nous essayons de raconter l'histoire de l'enfant, nous tomberons simplement sur nos pieds et ferons une impression incompréhensible - en plus, le débutant peut être de retour plus tard. Bien que je ne me considère pas comme un débutant, il y a beaucoup de choses que je ne sais pas, et je serais insulté si quelqu'un refusait de répondre à mes questions parce que "vous n'êtes pas encore là, junior".
Réponses:
Votre terminal exécute un shell (très probablement
bash
), qui est celui qui demande vos commandes et les exécute.Outre ce mode interactif, vous pouvez également utiliser votre shell pour exécuter des commandes à partir d'un fichier. Pour exécuter les commandes dans votre fichier, vous pouvez soit appeler le shell directement comme
bash script
ou vous pouvez démarrer votre fichier avec un "shebang"#!/bin/bash
et le rendre exécutable (chmod +x script
). Ensuite, vous pouvez traiter le script comme un binaire et l'exécuter par exemple comme./script
ou le placer à un endroit où le shell le recherche. (echo $PATH
)Votre shell interactif et le shell utilisé pour fonctionner le sont probablement
bash
. Du point de vue d'un "premier jour d'apprentissage linux", bash fonctionne exactement de la même manière dans les deux modes. - Beaucoup plus tard, vous pourriez tomber sur de légères différences. Si vous voulez vraiment en savoir plus, je vous suggère de lireman bash
et de rechercher des endroits mentionnant "interactif". (Vous pouvez rechercher une page de manuel en appuyant sur/
.)Une chose importante à noter est que le script est exécuté comme un nouveau processus. Cela signifie notamment que les variables définies dans le script ne sont pas visibles dans le shell appelant.
Sans l'exportation
a
n'est même pas visible pour le script interne.la source
En général, la réponse serait "non", les commandes en shell sont les mêmes dans les scripts, en syntaxe et en sémantique.
Mais il y a un tas de petites nuances liées à la configuration de l'environnement (quelles variables sont utilisées et à quoi elles sont définies).
le shell interactif de choix pour Linux est bash, mais les scripts utilisent souvent d'autres interprètes (
sh
, qui est un prédécesseur debash
,ksh
qui est comparable à bash), vous devez donc prendre en compte le shell utilisé (le nom du shell actuel est traditionnellement tenu en variableSHELL
, essayez de taperecho $SHELL
).il peut y avoir des différences dans la configuration du même interpréteur pour la session interactive et pour l'exécution du script.
la source
Non. Un script est une liste de commandes que vous pouvez taper dans le terminal.
Vous pouvez coller la totalité d'un script dans le terminal, et le résultat sera le même que l'exécuter.
Inversement, vous pouvez "enregistrer" vos commandes de terminal à l'intérieur d'un fichier et le transformer en un script réutilisable et le partager avec votre famille et vos amis.
la source
source script_file
. qui modifiera les vars ENV dans le contexte actuel. lors de l'exécution du script car./script_file
ne modifiera pas l'ENV, sauf s'ilexport
est utilisé explicitement.export
il n'est pas possible pour un script de modifier les variables du shell appelant. Il en va de même pour des choses comme PWD, des alias définis, des fonctions et des choses comme ça. Ils ne peuvent être modifiés que de manière interactive ou en recherchant un fichier. Mais oui, ce n'est probablement rien que quelqu'un trébuchera le premier jour. :)