En nuestro sistema escolar, estamos en condiciones de ejecutar archivos de comandos sin necesidad de escribir bash
o csh
o lo que sea, sin indicar qué tipo guión es. Sin embargo, en Ubuntu, debo escribir, bash script.bash
por ejemplo. ¿Esto siempre es necesario en Ubuntu, o es una configuración que puedo cambiar?
11
.sh
para secuencias de comandos bash. Sin embargo, generalmente las extensiones de archivo no se usan para scripts ejecutables en el mundo UNIX.Respuestas:
Asegúrese de iniciar el script con
./script
la ruta completa o lo que sea. Esscript
posible que no funcione (funciona si el directorio está en$PATH
, como/usr/bin
), ya que en los sistemas UNIX no es costumbre tener el directorio actual en su camino (por razones de seguridad, ¡y es bueno!)Asegúrese de que el script sea ejecutable, por ejemplo:
chmod +x script
lo hará ejecutable.Asegúrese de tener
#!/bin/bash
como primera línea en su secuencia de comandos. También asegúrese de que no esté editado con algún tipo de editor de Windows, ya que a menudo usa el "tipo DOS" de eol (final de línea) que difiere del UNIX (si la lista de verificación anterior está bien, pero tiene "mal" intérprete: no existe tal archivo o directorio ", más o menos, incluso si es / bin / bash, esta suele ser la razón, ya que no es imprimible, por lo que generalmente no lo ve, \ r será tratado como parte de la camino del intérprete)Otros ya lo mencionaron: es importante tenerlo
/bin/bash
si usas las funciones de bash, también/bin/sh
estaba enlazado a un enlace simbólico/bin/bash
, pero ahora (hasta donde he notado) está enlazado a un enlace simbólicodash
que no proporcionará compatibilidad con bash, solo POSIXsh
. Es bastante importante, incluso los softwares bastante caros en nuestra empresa tienen este problema: los scripts contienen#!/bin/sh
como primera línea pero también dependen de las funcionalidades de bash.fuente
#!/usr/bin/env bash
que es un poco más portátil.Asegúrese de que la primera línea del archivo lea:
Si el shebang es
#!/bin/sh
, no debe usar ninguna característica específica de bash, solo características POSIX. Incluso si se/bin/sh
trata de un enlace simbólicobash
, bash se ejecutará en un modo de compatibilidad POSIX cuando se ejecute como sh, deshabilitando algunas (pero no todas) las funciones de bash.También deberá asegurarse de que el script sea ejecutable, por supuesto.
fuente
Una forma alternativa, fuertemente desaconsejada es agregar
.
aPATH
.o
El problema con este enfoque es que, en el primer caso, cualquier comando del sistema podría anularse con ejecutables del directorio actual, y en el último caso, los comandos desconocidos aún podrían anularse.
Considera lo siguiente:
Archivo: ls
Lo más probable es que ni siquiera lo note hasta que sea demasiado tarde.
fuente
echo
por ejemplo, el que está en su directorio se usará simplemente porque ese directorio está configurado en unaPATH
variable antes del/bin
. Shell simplemente busca comandos en directorios particulares dependiendo de su ordenPATH
y no anula / destruye nada. Pero sí, esto tiene implicaciones