Comment actualiser le répertoire dans BASH?

24

J'ai un répertoire, contenant des fichiers générés par le compilateur. Lors de chaque reconstruction, ce répertoire est nettoyé et, après le processus de génération, lsme donne une sortie vide. Après avoir cdquitté le répertoire, puis y revenir, cela fonctionne correctement. Les questions sont:

  1. Existe-t-il un autre moyen plus élégant de rafraîchir le répertoire?
  2. Que se passe-t-il réellement lorsque les fichiers sont supprimés et recréés? Pourquoi dois-je cdvoir le contenu réel du répertoire?
romain
la source

Réponses:

10

Votre script supprime très probablement le répertoire, et pas seulement les fichiers qui s'y trouvent. Ainsi, lorsque vous y êtes cdentré et que le répertoire est supprimé, vous le faites lssur un répertoire qui n'existe pas réellement.

Par cd ..et cd (directory)vous montez et revenez dans le répertoire (nouvellement créé), et les fichiers sont là comme vous vous y attendez.

La meilleure alternative consiste cdà ajouter le nom du répertoire à votre lscommande et à l'exécuter à partir du répertoire parent au lieu d' entrer et de sortir du répertoire. Donc, ls YourSubdirectoryau lieu de juste ls.

Kent
la source
45

Il existe même un moyen plus court: cd .

wjr
la source
3
Intéressant. Comme le colibri, cela, logiquement, ne devrait pas fonctionner - et pourtant il semble que oui. Je suppose que vous savez que cela fonctionne parce que vous l'avez essayé. Avez-vous une documentation à ce sujet? C'est à dire, si j'étais dans l'équipe de développement POSIX / bash, je serais tenté de considérer cela comme un bug. Connaissez-vous des documents qui disent qu'il est censé fonctionner de cette façon?
G-Man dit `` Réintègre Monica ''
3
Comme le faucon, celui-ci flotte magnifiquement au-dessus des fleurs - et pourtant il dévore les colibris.
Matt Faus
Oui! si parfait
chrismarx
1
C'est la meilleure réponse.
deddebme
Ah. Je le savais! Il devait y avoir un moyen. Merci!
andersoyvind
10

Cela semble étrange, mais il est court et rafraîchit le répertoire:

cd `pwd`

Notez que ce sont des ticks de retour, pas des guillemets simples autour du pwd

user339088
la source
2

Ce que @Kent a dit ou: ne supprimez pas le répertoire mais seulement son contenu, de cette façon vous pouvez rester dans le répertoire (sans " cd .. && cd -") et "ls" fait ce que vous attendiez de lui.

ckujau
la source
2

Il serait préférable que vous ne supprimiez pas le répertoire, mais que cd ..; cd -vous puissiez le faire cd $PWD.

Teddy
la source
2

créer un alias refresh = "cd .. && cd -" qui montera un répertoire et puis à nouveau cd dans le répertoire précédent

si vous êtes sûr d'avoir à nouveau besoin d'une fiche, vous pouvez

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

une fois les ailas créées, stockez l'alias dans votre fichier ~ / .bashrc en faisant

alias | grep refresh >> ~/.bashrc

afin qu'il soit disponible lors de votre prochaine connexion.

SK176H
la source
Sous Unix refreshest prêt à l'emploi.
kenorb
Qu'entendez-vous par «out-of-box»? Quand je l'ai vu, je l'ai interprété comme signifiant «standard»; maintenant je me demande ce que tu veux dire. Définissez "UNIX". Cygwin n'a pas de standard de commande "Actualiser" (OK, Cygwin manque beaucoup de choses standard dans POSIX / * nix / peu importe), et mon système Linux non plus.
G-Man dit `` Réintègre Monica ''