He visto esta pregunta en este sitio y esto me llevó a hacer esta pregunta. Quiero saber en Unix hablar ¿cuál es la diferencia entre un ejecutable y un script de shell?
He visto esta pregunta en este sitio y esto me llevó a hacer esta pregunta. Quiero saber en Unix hablar ¿cuál es la diferencia entre un ejecutable y un script de shell?
Un ejecutable se refiere a cualquier archivo con el conjunto de bits ejecutable que podría ejecutarse (incluso si hay errores en la ejecución real del programa).
Un script de shell es un tipo específico de ejecutable que está destinado a ser interpretado por un shell utilizando la #!
directiva para especificar un intérprete.
Un script es un archivo que:
Un script de shell es un script cuyo intérprete es un shell . En el mundo de Unix, "concha" se refiere a la familia de conchas que se asemejan a la concha de Bourne ; Estos shells modernos (ash, bash, ksh, zsh, ...) se ajustan al estándar de shell POSIX . En términos más generales, la palabra "shell" puede incluir otros intérpretes de comandos como csh, tcsh, fish, ...
Un ejecutable es cualquier archivo que se pueda ejecutar. Para ser efectivamente ejecutable, un archivo debe tener dos propiedades:
ls -l
: el x
personaje debe estar presente en la columna de permisos.El formato del archivo debe ser uno que el sistema reconozca como ejecutable. Los formatos ejecutables se pueden dividir en varias categorías:
#!
seguidos de una ruta a un archivo. Para ejecutar dicho archivo, el núcleo ejecuta el programa de intérprete y le pasa la ruta al script como argumento.Tenga en cuenta que ser un ejecutable depende del sistema. Por ejemplo, un binario amd64 Linux es ejecutable en un sistema amd64 Linux pero no en un sistema de 32 bits. Un binario para Android no es ejecutable en una instalación normal de Linux. Un ejecutable de Windows solo es ejecutable en Linux si Wine está presente. Un script que comienza #!/usr/local/bin/ruby
solo es ejecutable si hay un programa ubicado en /usr/local/bin/ruby
.
Un script de shell generalmente es ejecutable. Pero puede ser no ejecutable, si no tiene el permiso para ejecutarlo. Todavía puede hacer que se interprete pasándolo explícitamente al intérprete (por ejemplo bash /path/to/script
): "hacer que se interprete" es una forma elegante de decir "ejecutar".
shell-script:
Un script de shell es una serie de comandos que serán interpretados por un shell (generalmente sh o un shell compatible con sh, a veces otro).
El nombre del script puede, pero NO es necesario, terminar en ".sh" o ".bash" o ".csh", etc. (dando una pista sobre el shell por el que debe ser lanzado).
Para mayor claridad, supondré: que el nombre del script es script
, y el shell en el que debe iniciarse es bash
.
Una forma típica de lanzarlo en shell sería: bash /absolute/path/to/the/script
o bash ./relative/path/to/the/script
. De esa manera, no necesita tener el bit ejecutable establecido, ya que solo se lee por bash, que luego ejecuta el contenido.
También se puede configurar + x (ejecutable) para permitir iniciarlo directamente desde su sesión de shell actual con: / absolute / path / to / the / script (o ./relative/path/to/the/script). Cuidado: de manera predeterminada, cuando se inicia de esa manera, se inicia a través del shell que escribió o mediante un shell posix (el comportamiento depende del sistema operativo), por lo que posiblemente no sea el shell por el que se supone que debe ejecutarse. Es por eso que puede (y debe) especificar como la primera línea del script: #! / Path / to / good / shell, que le indica a su sistema operativo que ese script realmente debería ser lanzado por / path / to / good / shell.
ejecutable:
Un ejecutable es un archivo que tiene el bit "x" establecido para el usuario (s) / grupo (s) por el que se supone que debe ser lanzado. Normalmente puede ser un "binario" o un script.
Consejo: file /some/file
puede darle más información sobre el contenido del archivo. Prueba file /usr/bin/bash
o file /etc/profile
para ver algunos ejemplos.