Différence entre les commandes du script bash et les commandes du terminal

13

Existe-t-il des différences entre les commandes que vous saisissez dans le terminal et les commandes que vous incluez dans un script?

jth41
la source
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.

michas
la source
1

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.

Dmytro Sirenko
la source
-1

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.

Mathieu J.
la source
4
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".
Emanuel Berg