¿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?

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.


45

Incluso hay una forma más corta: cd .


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


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.


2

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


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.


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.