¿Cómo actualizo el directorio en BASH?

24

Tengo un directorio que contiene archivos generados por el compilador. Durante cada reconstrucción, este directorio se limpia y, después del proceso de compilación, lsme da un resultado vacío. Después de que cdsalgo del directorio y luego vuelvo a hacerlo, funciona bien. Las preguntas son:

  1. ¿Hay alguna otra forma más elegante de actualizar el directorio?
  2. ¿Qué sucede realmente cuando se eliminan y recrean archivos? ¿Por qué necesito cdver el contenido real del directorio?
romano
fuente

Respuestas:

10

Lo más probable es que su script elimine el directorio y no solo los archivos que están allí. Por lo tanto, cuando haya cdingresado y se haya eliminado el directorio, lo hará lsen un directorio que en realidad no existe.

Por cd ..y cd (directory)te mueves hacia arriba y hacia atrás en el directorio (recién creado), y los archivos están allí como esperas.

La mejor alternativa es, en lugar de cdentrar y salir del directorio, es agregar el nombre del directorio a su lscomando y ejecutarlo desde el directorio principal. Entonces, en ls YourSubdirectorylugar de solo ls.

Kent
fuente
45

Incluso hay una forma más corta: cd .

wjr
fuente
3
Interesante. Al igual que el colibrí, esto, lógicamente, no debería funcionar, y sin embargo parece que sí. Supongo que sabes que funciona porque lo has probado. ¿Tienes alguna documentación para ello? Es decir, si estuviera en el equipo de desarrollo POSIX / bash, estaría tentado a considerar esto un error. ¿Conoces alguna documentación que diga que se supone que funciona de esta manera?
G-Man dice 'Restablece a Mónica' el
3
Al igual que el halcón, este, hermosamente, flota por encima de las flores y, sin embargo, devora colibríes.
Matt Faus
¡Sí! tan perfecto
chrismarx
1
Esta es la mejor respuesta.
deddebme
Ah ¡Lo sabía! Tenía que haber un camino. ¡Gracias!
andersoyvind
10

Parece extraño, pero es breve y actualiza el directorio:

cd `pwd`

Tenga en cuenta que esas son marcas de verificación, no comillas simples alrededor del pwd

user339088
fuente
2

Lo que @Kent dijo o: no elimine el directorio sino solo su contenido, de esta manera puede permanecer en el directorio (sin " cd .. && cd -") y "ls" hace lo que esperaba que hiciera.

ckujau
fuente
2

Sería mejor si no eliminara el directorio, pero en lugar de cd ..; cd -hacerlo podría hacerlo cd $PWD.

Osito de peluche
fuente
2

cree un alias refresh = "cd .. && cd -" que subirá un directorio y luego volverá a cd en el directorio anterior

si está seguro de que necesitará una lista nuevamente, puede tener

alias refresh="cd .. && cd - && ls -lrt"

una vez que se crea el ailas, almacene el alias en su archivo ~ / .bashrc haciendo

alias | grep refresh >> ~/.bashrc

para que esté disponible la próxima vez que inicie sesión.

SK176H
fuente
En Unix refreshestá listo para usar.
kenorb
¿Qué quiere decir con "listo para usar"? Cuando lo vi, lo interpreté como "estándar"; ahora me pregunto a qué te refieres. Definir "UNIX". Cygwin no tiene un estándar de comando "actualizar" (OK, a Cygwin le faltan muchas cosas que son estándar en POSIX / * nix / lo que sea), y mi sistema Linux tampoco.
G-Man dice 'Restablece a Mónica' el