"Comando no encontrado" cuando se ejecuta un script de shell. ¿Qué rompí?


8

Estoy en OSX Snow Leopard.

Aquí está el contenido completo de grr.sh:

#!/bin/sh

echo wow

Cuando intento ejecutarlo desde la terminal:

$ grr.sh
-bash: grr.sh: command not found
$ /bin/sh grr.sh
wow
$ sh grr.sh
wow
$ bash grr.sh
wow

Bueno. Lo suficientemente justo. Le daré permiso ejecutable, luego intente nuevamente:

$ chmod +x grr.sh
$ grr.sh
-bash: grr.sh: command not found
$ chmod 755 grr.sh
$ grr.sh
-bash: grr.sh: command not found

Hmmm ¿Tal vez funcionará si uso bash explícitamente? Cambiaré el contenido del archivo a:

#!/bin/bash

echo wow

Y obtengo exactamente los mismos resultados. ¿Qué podría haber roto?

¡Una última cosa! En caso de que tengas curiosidad ...

$ which sh
/bin/sh

Respuestas:


19

Absolutamente nada. Solo los ejecutables en uno de los directorios $PATHpueden ejecutarse directamente, y .(generalmente) nunca se ejecutan $PATH. Especifique la ruta al ejecutable, es decir ./grr.sh.


3
+1. También es de destacar que el directorio actual está en la ruta en los sistemas Windows de manera predeterminada y tiene la máxima prioridad. Esta diferencia crucial es probablemente la fuente de la confusión del autor de la pregunta.
Afrazier 01 de

¡Fuiste el primero por 9 segundos! ¡Gracias!
Cierre Cowboy

Usted guarda mi macbook
vietnguyen09

7

¿Está la ubicación de grr.sh en la $PATHvariable? Si no, deberá ingresar:

./grr.sh

si está en la misma carpeta que grr.sh. De lo contrario, proporcione la ruta completa.


6

Los permisos para el archivo son incorrectos. Pruebe los siguientes comandos:

  $ chmod 777 file.sh
  $ ./file.sh

0

Sí, y lo que significa ./grr.sh, es que en este directorio, ejecute el comando grr.sh. El soltero . significa en el directorio de trabajo. De lo contrario, su shell asume que está intentando ejecutar un comando en su $ PATH.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.