./ vs ejecución normal

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 bin, en su lugar puedo ejecutarlo a través de ./startNetworkServer.

Sin embargo de~

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

Respuestas (2)

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

Cuando le pide al shell que ejecute un comando si proporciona una ruta absoluta (que comienza con /la segunda), intentará ejecutar ese programa en esa ruta. Si proporciona una ruta relativa (es decir, una que no comience 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 el ., lo repavimentará con la ruta absoluta de su directorio actual y, por lo tanto, obtendrá una ruta que se puede ejecutar.

  • ~= carpeta de inicio nada más.

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

  • cdes cambiar de directorio, por lo que no se ejecutará

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

Referencias:
http://linuxcommand.org/learning_the_shell.php http://www.arachnoid.com/linux/shell_programming.html

Gracias... pero no es que no conozca esos comandos (los básicos) es que el comportamiento es diferente cuando trato de ejecutar a través de la ruta completa o cuando estoy en ese directorio