Cada vez que ejecuto un script bash scriptname.sh
desde la línea de comandos en Debian, obtengo Command Not found
y luego el resultado del script.
El guión funciona, pero siempre hay una Command Not Found
declaración impresa en la pantalla para cada línea vacía. Cada línea en blanco resulta en un comando no encontrado.
Estoy ejecutando el script desde la /var
carpeta.
Aquí está el guión:
#!/bin/bash
echo Hello World
Lo ejecuto escribiendo lo siguiente:
bash testscript.sh
¿Por qué ocurriría esto?
bash -x scriptname.sh
para rastrear el error. - En mi caso, era un archivo sh guardado en Windows con VSCode y terminaciones de línea como "CRLF". En VSCode, en la esquina inferior derecha, puede cambiar el terminador de línea de "CRLF" a "LF". Subí este archivo y finalmente pude ejecutarlo conbash scriptname.sh
.Respuestas:
Asegúrate de que tu primera línea sea:
Ingrese su camino a bash si no lo es
/bin/bash
Intenta ejecutar:
Eso convertirá los finales de línea, etc. de Windows al formato Unix. es decir, quita \ r (CR) de los finales de línea para cambiarlos de
\r\n (CR+LF)
a\n (LF)
.Más detalles sobre el
dos2unix
comando (página de manual)Otra forma de saber si su archivo está en formato DOS / Win:
La salida se verá así:
Esto generará el texto completo del archivo que se
<CR>
mostrará para cada\r
carácter del archivo.fuente
bash scriptname.sh
(pero sigue siendo una buena práctica, por supuesto).Puede utilizar
bash -x scriptname.sh
para rastrearlo.fuente
También me encontré con un problema similar. El problema parece ser los permisos. Si lo hace
ls -l
, es posible que pueda identificar que es posible que su archivo NO tenga el bit de ejecución activado. Esto NO permitirá que se ejecute el script. :)Como @artooro agregó en el comentario:
fuente
chmod +x testscript.sh
Esto puede ser trivial y no relacionado con la pregunta del OP, pero a menudo me equivoqué al principio cuando estaba aprendiendo a escribir scripts.
Esto producirá una respuesta de "comando no encontrado". La forma correcta es eliminar los espacios
fuente
Si el script hace su trabajo (relativamente) bien, entonces está funcionando bien. Su problema probablemente sea una sola línea en el archivo que hace referencia a un programa que no está en la ruta, no está instalado, está mal escrito o algo similar.
Una forma es colocar un
set -x
en la parte superior de su secuencia de comandos o ejecutarlo con enbash -x
lugar de solobash
: esto generará las líneas antes de ejecutarlas y, por lo general, solo necesita mirar la salida del comando inmediatamente antes del error para ver qué está causando el problemaSi, como usted dice, son las líneas en blanco que causan los problemas, es posible que desee comprobar lo que está convenientemente indicado en ellos. Correr:
y asegúrese de que no haya caracteres divertidos "invisibles" como el
CTRL-M
(retorno de carro) que puede obtener al usar un editor de tipo Windows.fuente
En Bash para Windows, intenté ejecutar incorrectamente
sin ./ al principio y obtuve el mismo error.
Para las personas con antecedentes de Windows, el formulario correcto parece redundante:
fuente
utilizar
dos2unix
en su archivo de script.fuente
Tratar
chmod u+x testscript.sh
Lo sé desde aquí: http://www.linuxquestions.org/questions/red-hat-31/running-shell-script-command-not-found-202062/
fuente
para ejecutar que debe proporcionar la ruta completa de eso, por ejemplo
fuente
Si tiene Notepad ++ y recibe este mensaje de error .sh: "comando no encontrado" o este mensaje de error de autoconf "línea 615: ../../autoconf/bin/autom4te: No existe tal archivo o directorio" .
En su Bloc de notas ++, vaya a Editar -> Conversión EOL y luego marque Macinthos (CR) . Esto editará sus archivos. También recomiendo verificar todos los archivos con este comando, porque pronto ocurrirá tal error.
fuente
Tuvo el mismo problema. Desafortunadamente
así que hice esto para convertirme.
y entonces
fuente
Los problemas con la ejecución de scripts también pueden estar relacionados con el formato incorrecto de los comandos de varias líneas, por ejemplo, si tiene un carácter de espacio en blanco después del salto de línea "\". Por ejemplo, esto:
(tenga en cuenta que el espacio adicional después de "\") causará problemas, pero cuando elimine ese espacio, funcionará perfectamente.
fuente
También estaba tomando algunos de los
Cannot execute command
. Todo parecía correcto, pero de hecho estaba teniendo un espacio irrompible
justo antes de mi comando que, por supuesto, era imposible de detectar a simple vista:Que, en Vim, se veía así:
Solo después de ejecutar el comprobador de scripts Bash
shellcheck
encontré el problema.fuente
shellcheck
está disponible en línea, aunque, por supuesto, debe copiar y pegar su script exactamente para que eso ayude. shellcheck.netMe encontré con esto hoy, copiando distraídamente el símbolo del sistema de dólar
$
(antes de una cadena de comando) en el script.fuente
Agregue el directorio actual (.) A PATH para poder ejecutar un script, simplemente escribiendo su nombre, que reside en el directorio actual:
fuente
.
A SU RUTA.Es posible que desee actualizar sus archivos .bashrc y .bash_profile con alias para reconocer el comando que está ingresando.
Los archivos .bashrc y .bash_profile son archivos ocultos que probablemente se encuentran en su unidad C: donde guarda sus archivos de programa.
fuente