¿Cuál es la diferencia entre filename
y ./filename
? ¿En qué circunstancias se prefiere uno al otro?
Para los archivos de datos, no hay diferencia: ambas declaraciones harán referencia al archivo de datos en su directorio actual. (Por ejemplo, cat filename
y cat ./filename
son semánticamente idénticos).
Es una historia diferente si el nombre de archivo en cuestión se refiere a un ejecutable , es decir, es lo primero (o incluso lo único) que escribe en la línea de comando. ./filename
buscará el ejecutable en su directorio actual y en ningún otro lugar. filename
, por otro lado, evaluará la variable de entorno PATH
y buscará filename
en cada directorio almacenado allí (que podría incluir o no su directorio actual).
./filename
(o cualquier otro /path/to/filename
) se prefiere cuando se desea ejecutar un ejecutable específico , no el primero que se encuentra en su RUTA.
Si está ejecutando un programa, filename
dice que ejecute el primero que se encuentra en su $PATH
y el segundo dice que ejecute el que está en el directorio actual.
Si está usando ese nombre de archivo como argumento para un programa como en do_something filename
o do_something ./filename
significan lo mismo.
Te refieres a la ejecución de comandos, ¿verdad?
Hay una variable de entorno PATH
que contiene algunos directorios del sistema, delimitados por punto y coma. Cuando escribe, command
el sistema busca en estos directorios en el orden en que están especificados para buscar un archivo ejecutable llamado <comando>. Si lo encuentra, intenta ejecutarlo. Puedes ver tu RUTA a través echo $PATH
de bash. Por ejemplo:
$ echo $ PATH
/ sbin: / bin: / usr / sbin: / usr / bin: / usr / games: / usr / local / sbin: / usr / local / bin: / home / ivanatora / bin: / usr / local / kde4 / bin: / usr / local / kde4 / bin
Cuando escribe ./filename
está especificando la ruta exacta: el directorio actual. Puede ver que el directorio actual rara vez está en su $ PATH (por razones de seguridad). Entonces, si desea ejecutar un archivo desde el directorio actual, lo usa ./filename
.
Para ejecutar un archivo por su ruta (especialmente si no está en $ PATH) también puede escribir <path>/file
, como:
/ sbin / ifconfig
La seguridad ejecutable es la razón principal de esta diferencia.
Usted no quiere . (presente directorio de trabajo o PWD) en su camino porque alguien podría troyano http://en.wikipedia.org/wiki/Trojan_horse_%28computing%29 un ejecutable crucial como ps o ls, en su PWD y engañarlo presentando datos incorrectos.
Depende de qué circunstancias lo estés usando.
Como argumento, por ejemplo, "nombre de archivo del programa", entonces depende del programa, pero generalmente son idénticos.
Como nombre de programa, por ejemplo, "argumentos de nombre de archivo", luego "argumentos de nombre de archivo" buscará PATH para encontrar el binario, mientras que "argumentos de nombre de archivo" utilizará el programa en el directorio actual. Esto es obviamente útil si. no está en la RUTA, pero también es útil usar esta, incluso si. está en la ruta, quizás porque coincide con una entrada anterior.