Este es el resultado del ls -allcomando:
-rwxr----- 1 subhrcho dba 3600 Nov 13 17:26 jdev
-rw-r----- 1 subhrcho dba 1566 Nov 13 17:26 jdev-Darwin.conf
-rw-r----- 1 subhrcho dba 347 Mar 6 2009 jdev-debug.boot
-rw-r----- 1 subhrcho dba 821 Nov 13 17:26 jdev-logging-debug.conf
-rw-r----- 1 subhrcho dba 584 Nov 13 17:26 jdev-logging.conf
-rw-r----- 1 subhrcho dba 4717 Jul 31 16:09 jdev.boot
-rw-r----- 1 subhrcho dba 12877 Nov 13 17:26 jdev.common
-rw-r----- 1 subhrcho dba 5047 Dec 6 01:43 jdev.conf
-rwxr-x--- 1 subhrcho dba 28160 Nov 13 16:28 jdev.exe
-rwxr-x--- 1 subhrcho dba 28672 Nov 13 16:28 jdev64.exe
-rwxr-x--- 1 subhrcho dba 28672 Nov 13 16:28 jdev64W.exe
-rwxr-x--- 1 subhrcho dba 28160 Nov 13 16:28 jdevW.exe
Ahora, cuando lo ejecuto jdev, ejecuta una versión diferente de Oracle JDveloper que cuando lo ejecuto como ... ¿Por ./jdevqué es así?

whichutilidad pueda decirle qué ejecutable se usará si no se proporciona ninguna ruta.typepara verificar lo que se inicia mediante un comando en particular. Causawhichle mostrará solo un binario en algún lugar de $ PATH, sin embargo, puede ser alias a absolutamente otro binario.[~] $which zsoelim /usr/bin/zsoelim [~] $ type zsoelim zsoelim is /usr/bin/zsoelim. Mientraszsoelim -> soelimwhichno tiene posibilidades de encontrar, ya que es un binario independiente que no tiene acceso al entorno de shell en ejecución (con lo que me refiero a alias y funciones, no solo a las variables de entorno , algunos de los cuales se heredan).Si llama a un comando sin una barra diagonal en su nombre en un shell, se busca en los alias, funciones y en la lista de rutas proporcionadas en la
$PATHvariable de entorno. (tenga en cuenta que puede tener el directorio de trabajo actual (especificado como.o la cadena vacía) o cualquier directorio relativo$PATH, pero eso no se recomienda por razones de seguridad).Si hay una barra oblicua en el nombre, entonces eso no sucede, el nombre se toma como una ruta para ejecutar el comando (aunque algunos shells como
zshpermitir que los alias o las funciones tengan barras en su nombre que luego prevalecerían).Entonces, si desea ejecutar un comando llamado
fooque está en el directorio de trabajo actual, debe encontrar un nombre que contenga una barra diagonal../fooEs lo más obvio. También podría usar la ruta completa, o../dir/foo...Para saber qué ejecutaría el shell, use el
typecomando No utilice elwhichcomando que generalmente no hace lo que cree que hace y es una herencia de lacshque es mejor dejarlo solo.fuente
which. Ver por ejemplo unix.stackexchange.com/questions/16693/…Recomiendo usar el 'where' incorporado de Zsh (mejor que 'which') para ver cómo y en qué orden se encontrarán alias, shell incorporados o cualquier otra cosa para $ PATH ;-)
Aquí hay un ejemplo para entender mejor las cosas, cómo se elige:
fuente
Aunque esto probablemente depende de su shell, la regla generalmente es:
Si proporciona una ruta, ya sea relativa o absoluta, se usa esa ruta.
./jdeves una ruta relativa, porque.representa el directorio actual (de hecho,ls -all .le daría lo mismo quels -all). Si lo hace/usr/bin/tool/, está utilizando una ruta absoluta. En estos casos, se ejecuta el archivo señalado.Si no proporciona una ruta, sino solo un nombre,
$PATHse busca en los directorios la herramienta que está intentando ejecutar.Si tiene un archivo en el directorio actual con el mismo nombre que un archivo en algunos de los directorios
$PATH, y lo ejecuta al anteponer./su nombre, efectivamente ejecutará un archivo diferente.Quizás otro problema es que realmente esperaba
jdevejecutar el ejecutable en el directorio actual. A menos que haya cambiado$PATHpara incluir., esto no es algo que deba esperar en absoluto ...... y todavía no es una buena idea incluir
.allí, si lo hace, al menos póngalo al final, para que el resto$PATHsiempre se busque primero, solo imagine que está en un directorio de red compartido y alguien decide poner un binario malvado allíls, ya que , si$PATHcomienza con., un simplels -lahserá suficiente para atacar su sistema.fuente
jdevsolo es también un camino relativo. La regla es: si no contiene una barra oblicua, entonces se busca en alias, funciones y$PATH, de lo contrario, se busca directamente en el sistema de archivos (aunque algunos shells permiten alias o funciones con / en su nombre que luego tomarían precedencia)