Respuestas:
En Linux, UNIX y sistemas operativos relacionados, .
denota el directorio actual. Como desea ejecutar un archivo en su directorio actual y ese directorio no está en el suyo $PATH
, necesita el ./
bit para indicarle al shell dónde está el ejecutable. Entonces, ./foo
significa ejecutar el ejecutable llamado foo
que está en este directorio.
Puede usar type
u which
obtener la ruta completa de cualquier comando que se encuentre en su $PATH
.
alias
eses que pueden interferir, no solo $PATH
.
.
primero, entonces sería un problema de seguridad, usted u otra persona podría reemplazar, ls
por ejemplo (un simple virus / trojen: haga un archivo zip con un ejecutable nombrado ls
en él, ya que alguien está buscando , ejecutan este ejecutable, eso ...). Si buscó en .
último lugar, puede pasar mucho tiempo volviéndose loco sin saber por qué su programa no funciona (por ejemplo, si realiza un programa llamado prueba, en lugar de ejecutar su programa, ejecuta el programa de prueba del sistema. El cual no produce resultados).
export PATH="$PATH:."
para ejecutar el comando en el directorio actual si no se encuentra en otra parte de la RUTA, puede agregar esto en su archivo .bashrc
La respuesta literal es como han dado otros: porque el directorio actual no está en su $PATH
.
Pero por que? En resumen, es por seguridad. Si está buscando en el directorio de inicio de otra persona (o / tmp), y escribe just gcc
o ls
, quiere saber que está ejecutando el verdadero, no una versión maliciosa que su amigo bromista ha escrito y que borra todos sus archivos. Otro ejemplo sería test
o [
, que podría anular esos comandos en los scripts de shell, si su shell no los tiene incorporados.
Tener .
como última entrada en tu camino es un poco más seguro, pero hay otros ataques que hacen uso de eso. Una fácil es explotar errores tipográficos comunes, como sl
o ls-l
. O bien, busque un comando común que no esté instalado en este sistema vim
, por ejemplo, ya que los administradores de sistemas tienen una probabilidad superior a la media para escribir eso.
PATH
variable de entorno.
Si quiere decir, ¿por qué necesita ./ al principio? Eso es porque (a diferencia de Windows), el directorio actual no es parte de su ruta de forma predeterminada. Si tu corres:
$ ls
su shell busca ls
en los directorios en su variable de entorno PATH ( echo $PATH
para verlo) y ejecuta el primer ejecutable llamado ls
que encuentra. Si escribes:
$ a.out
el shell hará lo mismo, pero probablemente no encontrará un ejecutable llamado a.out. Debe decirle al shell dónde está a.out: está en el directorio actual (.) Y luego está la ruta ./a.out
.
Si se pregunta por qué se llama "a.out", ese es solo el nombre de archivo de salida predeterminado para gcc. Puede cambiarlo con la línea de comando -o arg. Por ejemplo:
$ gcc test.c -o test
$ ./test
touch .a.out; ls -lA
ver esto.)
<dir>/<file>
por lo que básicamente está diciendo ejecutar un archivo en el directorio actual, que se indica por./test
Puede intentar agregar :.
a su variable $ PATH.
Pruebe ALT + F2 y escriba: gksudo gedit /etc/environment
si está ejecutando Linux / GTK (esto es lo que tiene si usa Ubuntu).
SIN EMBARGO, le recomiendo que NO haga eso. Es malo, malo, malo y malo.
Sabes, ese tipo de cosas funcionan así desde 1970. Hay una razón por la cual el directorio actual no está incluido en $ PATH.
.
es el directorio actual
.something
sería un archivo oculto (escriba "ALT +" para que aparezcan en Nautilus o intente " ls -la
".
./someProgram.sh
es lo que escribe para ejecutar un ejecutable someProgram.sh en el directorio actual.
.somethingElse
significaría que tiene un ejecutable oculto en el directorio actual, lo cual es una mala idea.
./command_name
para ejecutar un comando en Linux?"