Lorsque vous tapez
./program
La coquille tente d'exécuter le programme en fonction de la façon dont il détermine le fichier doit être exécuté. S'il s'agit d'un binaire, il tentera d'exécuter le sous-programme d'entrée. Si le shell détecte un script, par exemple par l'utilisation de
#!/bin/sh
ou
#!/bin/awk
ou plus généralement
#!/path/to/interpreter
le shell passera le fichier (et tous les arguments fournis) en tant qu'arguments à l'interpréteur fourni, qui exécutera ensuite le script. Si l'interpréteur donné dans le chemin n'existe pas, le shell commettra une erreur, et si aucune ligne d'interpréteur n'est trouvée, le shell supposera que le script fourni est exécuté par lui-même.
Une commande
sh program
est équivalent à
./program
lorsque la première ligne de programme contient
#!/bin/sh
en supposant que/bin/sh est sh dans le chemin (ce pourrait être/system/bin/sh, par exemple). Passer un binaire à sh fera que sh le traitera comme un script shell, ce qui n'est pas le cas, et binary n'est pas interprétable shell (qui est du texte brut). C'est pourquoi vous ne pouvez pas utiliser
sh program
dans ce contexte. Il échouera également en raison du programme étant ruby, awk, sed, ou toute autre chose qui n'est pas un script shell.
ne devrait-il pas être #!/Bin/sh? – Protostome