./ vs ejecución normal

3

Esta es probablemente una pregunta más para los sistemas UNIX, pero como la tengo en mi Mac Pro, espero encontrar una respuesta aquí:

Cuando navego a /Library/Java/JavaVirtualMachines/jdk1.7.0_11.jdk/Contents/Home/db/bin

con un cd no puedo ejecutar el comando startNetworkServer presente en el contenedor, en su lugar, puedo ejecutarlo a través de ./startNetworkServer .

Sin embargo, desde ~

MacCris:~ cris$ /Library/Java/JavaVirtualMachines/jdk1.7.0_11.jdk/Contents/Home/db/bin/startNetworkServer

funciona sin ./

¿Alguna idea de por qué? (¿derechos relacionados?)

Gracias

    
pregunta Cris 20.12.2013 - 21:39

2 respuestas

7

Esto se debe al comportamiento de su shell que se ejecuta allí Terminal.app. Probablemente sea el bash shell

Cuando le pide al shell que ejecute un comando si proporciona una ruta absoluta (que comienza con / como lo hace la segunda), intentará ejecutar ese programa en esa ruta. Si proporciona una ruta relativa (es decir, una que no comienza con / ), intentará crear una ruta absoluta anteponiendo los directorios que están en su variable de entorno PATH a lo que escribió. Como su directorio actual o . no está en su RUTA, no puede encontrar un archivo para ejecutar. Si la ruta comienza con un . , la repavimentará con la ruta absoluta de su directorio actual y, por lo tanto, obtendrá una ruta que puede ejecutarse.

    
respondido por el Mark 20.12.2013 - 21:50
2
  • ~ = carpeta de inicio nada más.

  • ./something ejecutará ese algo (ya sea un script o un binario)
    Escribir la ruta completa es lo mismo que ejecutar con ./

  • cd es el directorio de cambios, por lo que no se ejecutará

Estos son todos los comandos estándar de la línea de comandos de Unix / Linux

Referencias:
enlace enlace

    
respondido por el Jakub 20.12.2013 - 21:47

Lea otras preguntas en las etiquetas