Uno de los tutoriales que he seguido brevemente declaró que cd .
no tiene ningún uso. Al intentar replicar el problema que muestra OP en la recursividad de enlace simbólico, ¿qué lo hace "restablecer"? , También lo intenté cd .
, que mostró el mismo efecto que describió OP ( $PWD
variable de crecimiento ), con el que se puede contrarrestar cd -P
.
Esto me hace preguntarme, ¿hay algún caso en el que uno realmente quiera usar cd .
?
cd-command
Sergiy Kolodyazhnyy
fuente
fuente
cd .
para activar esas comprobaciones porque es breve y simple. Aunque creo que pretendías que la pregunta fuera para un ambiente vainilla.$PWD
,cd .
también cambia$OLDPWD
al directorio actual. (Actualmente) no tengo idea de por qué esto podría ser útil, pero en aras de la integridad ...cd .
, aunque al ver las respuestas a continuación, podría hacerlo en el futuro, pero en ocasiones lo he usadopushd .
cuando quería poderpopd
volver a este directorio más tarde. por ejemplo, cuando ejecute un script de compilación que lo hagaconfigure
,cd output...
ymake
, cuando esté hecho, querré volver al directorio original. En lugar de mantener mi propia copia del buildscript que es diferente de lo que todos los demás esperan, simplemente lo ejecuto comopushd .; ./BuildScriptName.sh; popd
, y esto también me da la libertad de no hacerlopopd
algunas veces, y luegopopd
más tarde./bin/cd
aquí unix.stackexchange.com/q/50058/85039Respuestas:
Creo que esto es pensar demasiado el problema.
cd .
puede que no sea algo que se ejecute manualmente en el curso habitual de las cosas, pero definitivamente es algo que puede surgir en la ejecución programática (piense en cualquier situación en la que pueda accedercd
al directorio que contiene un archivo, cuya ruta es suministrada por el usuario ) Por lo tanto, no tiene que tener un uso específico: siempre que cumpla con la semántica habitualcd <some-path>
, es útil.fuente
.
debe tratarse como una ruta válida especificada por lacd
sintaxis muy bien.IFS= read Dir; do cd "$Dir"; do_something; done < <(find . -type d)
. Durante su curso, find produce.
como ruta, de modo que el comando secd "$Dir"
expande acd .
. Entonces, en los scripts, es perfectamente útil.cd ${path_to_directory}
, pero en algún momento resulta que el directorio es el directorio actual,path_to_directory = .
por lo quecd .
deberá trabajar por si acaso.if
verificaciones yelse
cláusulas, cualquier tipo de carcasa especial).La ruta del directorio podría haber cambiado desde que se ejecutó el último comando, y sin
cd .
los shells bash y ksh93 se basará en el directorio de trabajo lógico descrito en la publicación vinculada en la pregunta, por locd .
que llamar a que el shell emita elgetcwd()
syscall garantizará su La ruta actual sigue siendo válida.Pasos para reproducir en bash:
mkdir ./dir_no_1; cd ./dir_no_1
mv dir_no_1 dir_no_2
echo $PWD
ypwd
. Observe que el directorio ha sido renombrado externamente; El entorno del shell no se ha actualizado.cd .; pwd; echo $PWD
. Observe que el valor ha sido actualizado.Sin embargo, ksh93 no actualiza la información del entorno, por lo que
cd .
en ksh93 puede ser inútil. En/bin/dash
Ubuntu y otros sistemas basados en Debian,cd .
devuelve eldash: 3: cd: can't cd to .
error, sin embargocd -P .
funciona (a diferencia de ksh93).fuente
mv ../dir_no_1 ../dir_no_2
en la misma terminal / bash.pwd
de hecho , está incorporado, sin embargo, la invocación/bin/pwd
no tiene ningún efecto en el entorno del shell: las utilidades externas en general no afectan el entorno del shell. La razón por la cual/bin/cd
y/bin/pwd
existe es para POSIX conformidad, entre otras cosas. Hay una buena discusión acerca de CD externo algunos de los cuales probablemente se aplica a/bin/pwd
asíOtro caso de uso
cd .
sería cuando el directorio en el que se encuentra actualmente se haya eliminado y luego se haya creado nuevamente. Considera probar lo siguiente:temp
cd temp
y luego hacer unls
temp
ls: cannot open directory .: Stale file handle
cd .
y luego hacer un ls funciona bienfuente
cd: can't cd to .
Ahora que lo veo, esto ya se menciona en la respuesta de Sergiy (mover, eliminar / recrear, esencialmente lo mismo: el directorio en el que se encuentra ya no es el que estaba en el original camino)cd .
un problema para moverme al nuevo directorio con el mismo nombre.cd .
todo el tiempo cuando tengo un shell cuyo directorio de trabajo actual se montó con sshfs pero la sesión ssh se ha cerrado y vuelto a abrir.PWD
la variable de entorno), luego recorrer la jerarquía del sistema de archivos desde la raíz, hasta un directorio al que se pueda acceder mediante esa ruta, ya sea en realidad el mismo directorio o no. Esto se ajusta exactamente al caso de uso en esta respuesta.cd .
funciona cuando el directorio se ha desvinculado y se crea un nuevo directorio diferente en la misma ruta del sistema de archivos. El directorio de trabajo actual se ha desvinculado y, presumiblemente, como parte de eso, ya no tiene una entrada.
o..
, e incluso si lo tuviera, la.
entrada debería continuar apuntándose a sí misma. Parece que el shell o el kernel está ejecutando el comando cd en función del nombre de la ruta del directorio en lugar de simplemente acceder a la.
entrada. ¿Alguien puede confirmar ese comportamiento?Puede borrar
$OLDPWD
con un rápidocd .
, si debe haber un caso en el que no desea que apunte a ningún lugar "interesante". También afectarácd -
.fuente
Programáticamente es útil como un no-op. Considere una ruta proporcionada desde una entrada externa.
Con una ruta como "fred.txt", el directorio se convertirá
.
encd .
fuente
dirname
comando genera.
donde sea necesario para evitar romper el código que espera poder dividir una ruta.Esto es común si tuviera que trabajar con un cable USB defectuoso. Después de que un dispositivo se desconecte y vuelva a conectar, y se monte automáticamente en el mismo directorio, debe usarlo
cd .
para que vuelva a funcionar.fuente
Tenga en cuenta que "." es la forma correcta de especificar el nombre del archivo que está abierto como el directorio de trabajo actual de cualquier proceso (incluido un proceso de shell, por supuesto) y "." siempre es un nombre válido de un archivo en todos los directorios, incluido el directorio de trabajo actual. El nombre
.
puede no ser un nombre válido para un archivo para una instancia determinada de un proceso si, por ejemplo, el directorio de trabajo actual subyacente se ha eliminado (o se ha "dañado", por ejemplo, un identificador NFS obsoleto), pero es un nombre válido de un archivo que se garantiza que existe en cada directorio válido.Por
.
lo tanto, debe ser un argumento válido para cualquier comando que acepte el nombre de un directorio y, por lo tanto, en el shell estándarcd .
debe ser un comando válido.Si
cd .
es útil o no depende de la implementación del shell. Como se mencionó, puede ser útil si el shell restablece su idea interna del nombre de ruta completo del directorio de trabajo actual después de llamar a la llamada delchdir
sistema subyacente , por ejemplo, si el directorio subyacente (o alguno de sus padres) ha cambiado de nombre.Al menos algunas conchas que conozco (
/bin/sh
en FreeBSD y NetBSD) convertirácd ""
encd .
, que posiblemente se puede describir una característica de apoyo para uso programático en una secuencia de comandos shell donde una variable podría ser utilizado como un parámetro (es decir, la conversión de una sustitución de variables vacío en un " no hacer nada "), aunque el historial de confirmaciones de FreeBSD dice que el cambio se debió directamente a la adición de soporte POSIX para evitar una fallachdir("")
, que los mandatos POSIX deben fallar.Algunos otros shells reemplazarán el
.
archivo con lo que hayan almacenado como el nombre de ruta completo de su directorio de trabajo actual, y por lo tanto para ellos esto puede permitir el comportamiento mencionado en la respuesta de Sahil Agarwal .fuente
Utilicé este comando justo hoy cuando reformulé la rama en la que estaba trabajando en Git, desde un directorio que se había creado por primera vez en esa misma rama. El rebase salió bien pero luego
git status
arrojó un error. Después de quecd .
todo fue normal.(Estaba trabajando en MobaXterm en Windows, por cierto. En caso de que esté intentando reproducir esto. Puede que no suceda en otros sistemas).
También he usado este comando en directorios que se actualizan mediante un proceso automatizado que deja de lado el directorio anterior y lo reemplaza por uno nuevo (por lo que es lo más cercano posible a atómico). No es una situación común, pero
cd .
es exactamente lo que se necesita.Después de leer esta excelente respuesta de Stephane Chazelas:
Ahora entiendo que mis casos de uso anteriores solo funcionan porque estoy usando
bash
, en lo quecd .
es equivalente acd "$PWD"
. Recomiendo leer la respuesta vinculada.fuente
Utilizo
cd .
para volver a ejecutar las cosas que he sobrecargadocd
a través de unabash
función.De mi
~/.bashrc
:fuente
EDITAR: Esto ya ha sido sugerido por Sahil anteriormente.
Esto es útil si está dentro de una carpeta que fue eliminada y recreada por otro proceso. Por ejemplo, suponiendo las dos sesiones terminales
$1
y$2
:No estoy seguro de dónde está exactamente (OS, SHELL, ...?) La causa raíz de este comportamiento.
fuente
No, no tiene sentido. Tampoco en las secuencias de comandos, simplemente no hace nada.
fuente
$PWD
, y posiblemente llamaría a otras funciones del shell si el usuario ha proporcionado su propiacd
función o alias para sobrecargar el incorporadocd
. También verificaría que el directorio actual sigue siendo válido y que el uso actual tiene permiso para estar allí.cd .
se quejaría.