¿Por qué se utiliza "./" al ejecutar un programa?

¿Por qué se utiliza "./" al ejecutar un programa?

Si tengo un programa llamado foo, ¿por qué necesito decir ./foo y no simplemente foo? ¿No significa ./ simplemente dentro del directorio actual?

Respuesta1

Cuando escribe solo un comando, por ejemplo. foo– el shell (normalmente bash) sólo lo buscará en ciertos directorios, como /bin, /usr/bin, /usr/X11R6/bin, etc. Normalmente lo haránobusque en su "directorio actual" (es decir, "." ) debido a problemas de seguridad (especialmentesi eresraíz). Si "." se agrega, se debe agregar ael final dela ruta de búsqueda.

Si desea ejecutar un ejecutable que seanoen esta ruta de búsqueda, debe especificar la ruta absoluta o relativa completa al comando. Por ejemplo:

/home/bok/foo   # Absolute in my homedir

~/src/bar  # Shorthand for my homedir and a subdir in it

../Download/foobar  # Relative path – up one step, then down in Download

O, si el comando está en mi directorio actual, simplemente agregue ./:

./foo

La ruta de búsqueda bashse almacena en elCAMINOvariable ambiental, para que puedas verla escribiendo:

echo $PATH

Para agregar "." – que realmenteno deberíahacer – escribir:

export PATH="$PATH:."

La RUTA se busca en orden, por lo que si hay varios ejecutables con el mismo nombre en diferentes directorios, el shell ejecutará el que esté primero en el directorio en la RUTA.

Primero, después de buscar en todos los directorios enumerados, aparecerá el error "comando no encontrado".

+++

El problema con agregar el directorio actual – .– a la RUTA, es que realmente no sabes si un ejecutable en un directorio "no estándar" en el que te encuentras debe ejecutarse o no.

Digamos que soy malvado y hago un programa destructivo que elimina tantos archivos como sea posible y lo deja en mi directorio de inicio – o peor, en /tmp... Llamo a este programa sl– un tipo de error común ls– y espero.

Algún usuario aleatorio está en /tmp y escribe mal lscon sl. Con una RUTA normal – sin . – No sucede nada, excepto que aparece un error de "comando no encontrado". Si obtuvo '.' al final de su RUTA, entonces no recibirá un error al escribir el comando. En cambio, mi slcomando se ejecutará y eliminará todos los archivos que posee. Si resulta serraíz, el comando podrá eliminar gran parte del sistema. (Esta es la razón porraíz realmente deberíaconvertirlo en una reglasiempreutilizar elruta completade comandos, en lugar de confiar en PATH).

Si hubiera colocado '.' primero en su RUTA e hice un programa llamado ls(ortografía correcta) y lo puse en un directorio, luego seríamiprograma (no el normal ls) que se ejecutaría si escribiera lsen ese directorio. Porque bashbuscaría en el directorio actual (.)primero– antes de buscar en los directorios del sistema con el archivo ls.

información relacionada