¿Qué es ./ en BASH?

¿Qué es ./ en BASH?

Estaba jugando en un shell y escribí ./. Obtengo el siguiente resultado:

bash: ./: Is a directory

Parece que "./" comprueba si existe un directorio con el nombre de pila. Estaba tratando de encontrar documentación sobre esto para ver si entendí bien, pero no puedo encontrar nada en línea. ¿Alguien puede explicarme esto?

Respuesta1

Es probable que no se encuentre una definición general para esto en el manual de Bash, perola especificación POSIX(sección Resolución de nombre de ruta):

El punto del nombre de archivo especial se referirá al directorio especificado por su predecesor.

Bueno, ¿cuál es el predecesor si sólo tenemos .? Destaqué la parte importante:

Si el nombre de la ruta no comienza con una barra, se considerará que el predecesor del primer nombre de archivo de la ruta esel directorio de trabajo actualdel proceso

También,

Un nombre de ruta que contenga al menos un carácter que no sea una barra y que termine con una o más barras diagonales finales se resolverá como si se agregara un carácter de un solo punto ( '.' ) al nombre de ruta.

Entonces, cuando escribe, ./se resuelve como ./., que básicamente apunta a su directorio de trabajo actual. Cuando escribes algo en tu shell y presionas Enter, el shell intentará ejecutar la primera parte como un comando. (Básicamente, el primer grupo de caracteres hasta el primer espacio en blanco).

No hay ningún comando o archivo ejecutable llamado ./., por lo que fallará y le dirá que ./"es un directorio". Curiosamente,. esun comando (es un comando incorporado que también se encuentra como source), por lo que cuando escribas .obtendrás: bash: .: filename argument required.

Respuesta2

Como han escrito otros, ./es el nombre del directorio actual. Cuando escribiste ./en el indicador de bash y presionaste Enter, intentaste ejecutar el directorio actual como un comando, lo cual por supuesto falló, y bash te dio el mensaje (parafraseado), "No puedo hacer eso. ./Es un directorio y no No puedo ejecutar directorios como comandos."

Respuesta3

Implica .el directorio actual. Se utiliza ./como prefijo para cualquier archivo en el directorio actual.

De manera similar, ..implica el directorio anterior (superior). A menudo se utiliza cuando se va a un directorio de nivel superior, por ejemplocd ../../../

Dado un sistema de archivos con el contenido:

# Comments start with a hash and aren't parsed
/                    # root directory
/foo/                # first level directory
/foo/bar/            # second level directory
/foo/bar/baz         # third level directory
/foo/bar/baz/qux     # a file in the third level directory

Si estás en el director de tercer nivel (baz) y ejecutas ls, verás qux. Si ejecuta ls ., obtendrá el mismo resultado que si ejecuta ls ./.

Si estás en el director de tercer nivel (baz), corres ls ..y ls ../ambos te dan baz. Es decir, el contenido del directorio de un nivel superior.

Respuesta4

En Linux ./ significa el directorio actual (y ../ se refiere al directorio principal).

Si haces un ls -a verás. y .. listados como directorios (necesita -a porque . representa un directorio oculto)

información relacionada