1 votos

¿Cuál es la diferencia entre ' prueba ' y ' test.sh ' durante la ejecución de scripts de shell?

He añadido un ./bin/ carpeta en mi directorio home.

Y me colocaron dos archivos en la ./bin de carpeta, con sólo un nombre de archivo y el otro es el nombre de un archivo.ext.

Los nombres de archivo son test y test.sh:

screen-shot-1

Cuando me quedo solo con el nombre del archivo, el terminal no muestra ninguna salida, pero cuando he intentado con el test.sh el script recibe la ejecución de:

screen-shot-2

Mi Pregunta es, puedo ejecutar la secuencia de comandos usando el nombre de archivo como "prueba" en el terminal, en lugar de dar el "test.sh".

3voto

Serg Puntos 17677

Cómo shell ejecuta los comandos:

De manual de bash:

Si el nombre no es una función de shell ni un builtin, y no contiene barras, bash busca en cada elemento de la PATHde acceso de un directorio que contiene un archivo ejecutable con ese nombre.

Esto significa que las funciones de shell y los comandos integrados tomar prioridad en primer lugar, y si no hay ninguno - busca el comando en la lista de directorios que se especifican en PATH variable.

¿Por qué a mi "prueba" de comandos no funcionan ?

Lo que encontró es test comando que es un comando integrado compatible con el original de la Bourne shell en bash. Este comando está en silencio, y es utilizado por simple lógica, la aritmética de la evaluación, y la evaluación de la cadena. Se utiliza en la lógica y si instrucciones:

bash-4.3$ test 1 -le 2 && echo "1 is less that or equal to 2"
1 is less that or equal to 2
bash-4.3$ if test 1 -le 2 ; then echo "1 is less than or equal to 2"; fi
1 is less than or equal to 2

Tenga en cuenta que test y [ exactamente el mismo:

bash-4.3$ [ 1 -le 2 ] && echo "1 is less that or equal to 2"
1 is less that or equal to 2
bash-4.3$ if [ 1 -le 2 ] ; then echo "1 is less than or equal to 2"; fi
1 is less than or equal to 2

También hay /usr/bin/test que se encuentra entre las utilidades estándar, y existen para la portabilidad y compatibilidad. Si no se test integrado en el shell, se vería a través de la PATH variable, y si /usr/bin/ pasó a ser antes de que su ~/bin en la lista - se iría /usr/bin/test. He aquí un ejemplo de que:

bash-4.3$ enable -n test
bash-4.3$ PATH="$HOME/bin/:$PATH" test
I am ~/bin/test

El uso de enable -n comando nos apague el construido-en test, y ejecutar test temporalmente con modificadas PATH tal mi ~/bin es la primera en la lista. El shell busca en la lista y encuentre mi script de shell ~/bin/test y corrió.

NOTA: por favor, no hagas esto! El ejemplo anterior es sólo para demostración ! Esto no es una buena manera de ejecutar las secuencias de comandos y no se recomienda. El uso apropiado de nomenclatura, nunca el nombre de los comandos mismo como shell construido-ins o los servicios existentes. Usted ha sido advertido.

¿Por qué test.sh trabajo ?

Lo que sucedió en su test.sh caso es que no hay un built-in o funciones que se llama test.sh y, por tanto, shell buscado en todos los directorios en PATH de la lista, hasta que encontró su test.sh archivo y lo ejecutó. Por eso funciona.

¿Este comportamiento se relacionan con las extensiones de archivo ?

No. Esto no tiene nada que ver con las extensiones de archivo y, de hecho, para la mayoría de los archivos de extensión es irrelevante. Shell se preocupa por la ubicación de lo que escriba en el símbolo del sistema, si es un built-in o de la función o alias, y si el archivo que mencionas tiene permisos de ejecución establecido.

Además, se preocupa por proceda #! línea (que es más formalmente conocido como intérprete de la directiva), porque si tienes shell script escrito de decir que para el C-shell pero no se han adecuado #! línea en la parte superior, y se intenta ejecutar con bash - el shell se trata de hacerla funcionar pero se romperá debido a la incompatibilidad de la sintaxis.

Más en general, Linux y Unix-como sistemas importa sobre todo la magia de los números , que son los primeros de varios bytes en un archivo que identificar el tipo de archivo.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: