Quest-ce que #! / Bin / bash dans les scripts shell? Quelle est la différence entre / bin / sh et / bin / bash? Pourquoi parfois, le script shell fonctionne sans les lignes?


Meilleure réponse

#!/bin/bash

Ceci est connu sous le nom de shebang, il indique à linterpréteur que les lignes suivantes sont écrites pour bash, alors exécutez ce fichier en tant que script bash.

#Example: Scripts are usually executed like below:

./scriptName

Ainsi, le shebang détermine comment interpréter le script, parfois cela pourrait être comme suit:

#!/bin/sh

#!//usr/bin/perl

#!/usr/bin/python

#!/bin/bash

#!/bin/ksh

Donc, ces lignes déterminent comment les scripts doivent être interprété et exécuté. arrive maintenant à Pourquoi /bin/sh?

Il pointe vers lun des shell configurés, parfois sh pointe vers bash, parfois un autre shell comme cshell, dash,zsh ,ksh etc.

Exemple:

#case-1:

ls -lrt /bin/sh

lrwxrwxrwx 1 root root 4 Feb 19 2014 /bin/sh -> dash

#case-2

ls -lrt /bin/sh

lrwxrwxrwx 1 root root 4 Jul 12 2017 /bin/sh -> bash

Donc, si vous utilisez #!/bin/sh dans votre script, le comportement de votre script sera différent en fonction du shell sh pointe vers votre système. Notez que vous pouvez remplacer le shebang en exécutant votre script comme:

bash scriptName

#or

sh scriptName

Dans les deux cas ci-dessus, shebang naura pas dimpact sur lexécution et ce sera fait par bash et sh (shell pointé par ceci).

Réponse

Eh bien, exactement comment ils fonctionnent de nombreux niveaux de détails, nous serons donc assez inexacts ici. Tous les programmes sont exécutés en plaçant leur code dans une section de mémoire spécifique et dédiée, puis en appelant le point dentrée de cette image de code en mémoire. Après cela, le programme sexécute.

Laction de mettre limage de code en mémoire est effectuée par le système dexploitation et cest ce que nous appelons «lancer» ou exécuter le programme. Le système dexploitation le fait de sa propre initiative une seule fois; au moment du démarrage quand il lance le processus init . Le processus init et ses descendants demandent au système dexploitation de lancer dautres processus, en appelant le exec Appel système OS.

Le shell est à la fois spécial et ordinaire. Cest juste un autre programme qui fonctionne, comme nimporte quel autre. Il na pas de super-pouvoirs ou de propriétés spéciales. Il a pour but de permettre à lutilisateur daccéder aux services de lOS, principalement pour lancer dautres programmes que lutilisateur spécifie. Il fournit des méthodes accessibles à lutilisateur qui lui permettent daccéder au système de fichiers et de spécifier comment certains flux standard de communication de données sont utilisés ( stdin , stdout , et stderr ).

Les shells fournissent un langage de programmation qui peut être utilisé pour faire les choses de manière automatisée, en prenant des décisions et en effectuant des itérations, pour plus defficacité, et ainsi ils peuvent travailler sans interaction de lutilisateur. Ils fournissent et utilisent une syntaxe et une notation spéciales que lutilisateur doit apprendre et utiliser pour appeler le langage de programmation et le traitement en ligne de commande. Le traitement des commandes du shell peut provenir dun terminal interactif, ou de fichiers texte contenant des scripts.

Les programmes quun shell lance sont appelés processus fils du shell. Tout processus peut lancer un autre processus, donc le shell n’est pas spécial en ce sens. Le shell est optimisé pour permettre à lutilisateur de spécifier comment lancer ses processus enfants. Vous pouvez voir la hiérarchie de tous les processus sur un hôte Linux en utilisant la commande

ps -e lf

Vous trouverez quelque part dans la liste le processus ps lui-même, et il apparaîtra comme un processus enfant du processus shell que vous avez utilisé pour le lancer.

Là sont beaucoup plus de détails; beaucoup trop à couvrir dans une réponse Quora.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *