J'utilise Linux depuis un certain temps maintenant et je cherchais un aperçu complet de cela, mais je n'en ai trouvé aucun.
Je n'arrive tout simplement pas à accepter les différentes façons d'exécuter des scripts et des fichiers binaires - c'est tout un gâchis pour moi et je dois utiliser des essais et des erreurs pour déterminer ce que je devrais utiliser. Pour un fichier qui est un script ou un binaire <script/binary>
, je peux proposer les alternatives suivantes:
<script/binary>
. <script/binary>
./<script/binary>
source <script/binary>
sh <script/binary>
(Y a-t-il plus?)
Quelqu'un peut-il donner un aperçu complet des commandes qui fonctionnent avec quels types de fichiers et quelle est la différence entre plusieurs options?
Merci.
Les commandes suivantes sont les mêmes, un composant point signifie "répertoire courant". Pour permettre leur exécution, les fichiers doivent avoir des autorisations exécutables:
path/to/binary
./path/to/binary
Notez que si un chemin d'accès ne contient pas de barre oblique, il est traité comme une commande (un shell intégré ou un programme recherché dans la variable d'environnement $PATH
).
Les éléments suivants sont presque identiques, ils exécutent un script Shell (pas un fichier binaire!) Dans l'environnement Shell actuel. Une petite différence entre les deux lignes est décrite sur ce question Unix.SE .
. path/to/script
source path/to/script
Enfin, vous avez mentionné sh script
. Encore une fois, cela ne fonctionne que pour les scripts Shell et non les fichiers binaires. Vous exécutez essentiellement le programme sh
avec le nom de script en argument. Dans le cas de sh
, il considère simplement cet argument comme un script shell et l'exécute.
Pour les réponses restreintes aux scripts de shell, voir Différentes façons d’exécuter un script Shell .
Merci pour toute la contribution. Je vais essayer de répondre à ma propre question maintenant et de fournir un guide complet sur les différentes possibilités d'exécution de scripts et de fichiers binaires. Veuillez éditer et commenter et nous pourrons proposer quelque chose de complet et de correct. Voici ma suggestion:
Au début, deux points à préciser:
Linux fait la distinction entre une commande et un chemin . Une commande est uniquement saisie telle quelle dans l'invite, et exécutera une commande intégrée ou fera en sorte que Linux recherche le binaire ou le script correspondant. sur le $ PATH.
Pour que Linux interprète quelque chose comme un chemin, il doit contenir au moins une barre oblique (/). Par exemple. Dans ./myScript
, ./
peut sembler assez redondant - il existe uniquement pour que Linux l'interprète comme un chemin plutôt que comme une commande.
Donc, les options pour exécuter un binaire ou un script:
Exécution d'un binaire binary
:
$ binary # when 'binary' is on the PATH, or is a built-in
$ ./binary # when 'binary' is not on the path but in the current directory
$ /home/me/binary # when 'binary' is not on the PATH, and not in the current dir
Exécution d'un script script
:
Le fichier devra avoir des autorisations d'exécution, sauf indication contraire.
$ script # execute a script that is on PATH. Will be executed in a new Shell.
# The interpreter to use is determined by the she-bang in the file.
$ ./script # execute a script that is in the current dir. Otherwise as above.
$ /a/dir/script # when the script is not on the PATH and not in current dir.
# Otherwise as above.
$ . script # execute a script in the current dir. Will be executed in the
# current Shell environment.
$ source script # equivalent to the above *1
$ sh script # executes 'script' in a new Shell *2 (the same goes for 'bash ...',
# 'zsh ...' etc.). Execute permission not neccessary.
à propos de la frange:
Les scripts avec un she-bang (par exemple #!/bin/sh
) sur la première ligne indiquent quel interpréteur utiliser.
./script
ou en utilisant une commande: script
(script
doit figurer sur le chemin PATH).sh script
ignorera le she-bang et utilisera, dans ce cas, sh
comme interprète. script
ou source
ignorera le she-bang et utilisera l'interpréteur actuel (puisque .
ou source
équivaut à simplement exécuter chaque ligne du script dans le shell actuel)Notes
* 1: Ce n'est que presque vrai. En bash, il s’agit bien de la même commande, mais lorsqu’on utilise source
, script
sera recherché dans $ PATH avant le répertoire en cours . C'est bash, mais dans les shells POSIX-only, source
ne fonctionne pas, mais .
si. Utilisez donc plutôt ce dernier pour la portabilité.
* 2: ce qui se passe réellement, c'est que nous lançons le sh binaire avec 'script' en argument, ce qui fera que 'sh' exécutera 'script' dans son nouveau shell
Voici une liste rapide des commandes. Notez que lorsque je parle de PATH, je parle des répertoires contenant des programmes connus du système; vous trouvez ceux avec echo $PATH
, et ce sera quelque chose comme: /home/mike/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
Scripts
./myscript.sh
./myscript.sh textfile.txt
Les scripts peuvent également être exécutés avec des arguments; comme expliqué dans Rute (p. 68): myfile.sh dogs cats birds
générera The first argument is: dogs, second argument is: cats, third argument is: birds
car le contenu de ce script après Shebang est: echo "The first argument is: $1, second argument is: $2, third argument is: $3"
Pour exécuter un script dans un autre répertoire, utilisez ~/Scripts/dogs.sh
scriptname
.get_iplayer
Binaires
vlc <stream url to open>
.~/<folder>/app/myprog