Gracias por todo el aporte. Intentaré responder mi propia pregunta ahora y proporcionar una guía completa de las diferentes posibilidades para ejecutar scripts y binarios. Edite y comente y podremos llegar a algo completo y correcto. Aquí está mi sugerencia:
Al principio, dos puntos para indicar:
Linux hace una distinción entre un comando y una ruta . Un comando solo se escribe tal cual en el indicador y ejecutará una función incorporada o hará que Linux busque un binario correspondiente o un script en $ PATH.
Para que Linux interprete algo como una ruta, debe contener al menos una barra inclinada (/). Por ejemplo ./myScript
, en , ./
puede parecer bastante redundante: está ahí solo para que Linux lo interprete como una ruta en lugar de un comando.
Entonces, las opciones para ejecutar un binario o un script:
Ejecutando un binario 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
Ejecutando un script script
:
El archivo deberá tener permisos de ejecución a menos que se indique lo contrario.
$ 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.
Sobre she-bangs :
Los guiones con un she-bang (p #!/bin/sh
. Ej. ) En la primera línea le indican qué intérprete usar.
- Este intérprete se usará cuando se ejecute
./script
o use un comando: script
( script
debe estar en la RUTA)
- El uso
sh script
ignorará el she-bang y el uso, en este caso, sh
como intérprete
- Usar
. script
o source
ignorará el she-bang y usará el intérprete actual (ya que .
o source
es equivalente a ejecutar cada línea del script en el shell actual)
Notas al pie
* 1: Esto solo es casi cierto. En bash, de hecho, son el mismo comando, pero cuando se usan source
, se script
buscarán en $ PATH antes del directorio actual. Eso es bash, pero en shells solo POSIX, source
no funciona, pero .
funciona. Por lo tanto, use este último para la portabilidad.
* 2: lo que realmente sucede es que ejecutamos el sh binario con 'script' como argumento, lo que hará que 'sh' ejecute 'script' en su nuevo shell