Cuando quiero volver al directorio de nivel superior en Linux escribiendo cd ..
, escribí mal cd //
. Para mi gran sorpresa, no se informan errores. Además, el aviso se convierte username@hostname://$
. ls
indica que ahora estoy en el directorio raíz.
¿Es esto un error o una característica del shell? Si es una característica, ¿es //
un alias de /
? Mi shell es GNU bash, versión 4.1.5 (1) -release (i686-linux-gnu).
Gracias y un saludo.
Respuestas:
Puede ser considerado cualquiera.
En Linux,
//
no significa nada: múltiples barras consecutivas se colapsan en una, en cualquier parte de la ruta, incluido el comienzo. Cambiar el directorio a lo//
coloca/
, comoreadlink /proc/self/cwd
lo diría ejecutar ; Del mismo modo,/usr//local///bin
se contrae a/usr/local/bin
.Sin embargo, algunos otros sistemas similares a Unix, como Cygwin o el antiguo dominio / sistema operativo Apollo, utilizan el
//
prefijo para rutas de red como//fileserver/path/to/data
. POSIX también permite esto.Por varias razones, el shell bash rastrea el directorio actual por sí mismo (además del seguimiento proporcionado por el sistema operativo) y tiene un código que evita que la inicial
//
se colapse, para seguir siendo compatible con dichos sistemas. La "característica" es que bash proporciona un seguimiento más intuitivo del directorio actual, por ejemplo, cuandocd
ingresa en un enlace simbólico, bash le mostrará la ruta que espera, aunque el núcleo piense lo contrario. El "error" es que bash lo permite//
incluso en sistemas que no lo usan.fuente
zsh
permitecd //
, pero es lo suficientemente inteligente como para mostrar/
en la cadena de solicitud.De la definición del nombre de ruta POSIX:
Fuente
Y más precisamente como la gravedad mencionada en su comentario a continuación, del capítulo 4.11 sobre Resolución de nombre de ruta:
fuente
Es una especie de característica. Si tiene un script de shell en uso y
find
, por ejemplo, todas las rutas tienen el prefijo ./ generalmente. Luego, si lo agrega a una ruta real, se convierte en `/my/path/./appended/path, que se resuelve en / my / path / appended / path. Entonces, si no me equivoco, // get se interpreta como /./ y, por lo tanto, /. Esto es lo mismo porque si fueras a / home / user //, terminarías en / home / user /fuente
Yo iría por el mensaje que muestra "error".
Cualquiera de las rutas "/", "//", "//////////////////////", ... tienen el mismo significado: "/". Puede agregar tantos "/" donde quiera en una ruta de Unix, esto no cambia su significado.
El "error" está más relacionado aquí con el hecho de que su solicitud utiliza la última ruta de acceso escrita válida para mostrar, no el "pwd" real.
Divertido de todos modos;)
fuente
//
en el indicador es un efecto secundario de la variable de entorno del indicador ($PS1
): ¿cómo sePS1
define?$PS1
variable se define como[\u@\h \W]\$
. ¿Algún problema con la configuración?/
cuando pwd =/
. Me preguntaba si estabas haciendo algún trabajo extra para obtener el directorio. Se$PROMPT_COMMAND
establece?echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:${PWD/#HOME/~}"; echo -ne "\007"
. ¿Podría explicar por favor con un poco de detalle? No estoy muy familiarizado con estas dos variables. Gracias.PS1
yPROMPT_COMMAND
- el usoman bash
en su línea de comandos o leer en líneaEs una característica y todos los // múltiples serán reemplazados por un solo /
Es útil si tiene variables con rutas como el ejemplo al final. Por lo tanto, su CD no recibirá ningún error y no tendrá que cambiar la variable del espacio de trabajo.
el contenido completo de la variable del proyecto es
fuente