Wie aktualisiere ich das Verzeichnis in BASH?


24

Ich habe ein Verzeichnis, das vom Compiler erzeugte Dateien enthält. Während jeder Neuerstellung wird dieses Verzeichnis bereinigt und gibt nach dem Erstellungsprozess lseine leere Ausgabe aus. Nachdem ich cdaus dem Verzeichnis und dann wieder zurück bin , funktioniert es richtig. Die Fragen sind:

  1. Gibt es eine andere, elegantere Möglichkeit, ein Verzeichnis zu aktualisieren?
  2. Was passiert eigentlich, wenn Dateien gelöscht und neu erstellt werden? Warum muss ich den cdaktuellen Verzeichnisinhalt sehen?

Antworten:


10

Ihr Skript entfernt höchstwahrscheinlich das Verzeichnis und nicht nur die Dateien, die sich dort befinden. Wenn Sie also darauf cdzugreifen möchten und das Verzeichnis entfernt wird, tun Sie dies lsin einem Verzeichnis, das tatsächlich nicht vorhanden ist.

Mit cd ..und cd (directory)bewegen Sie sich nach oben und zurück in das (neu erstellte) Verzeichnis, und die Dateien befinden sich dort, wie Sie es erwarten.

Die beste Alternative besteht darin, anstelle des cdEin- und Ausstiegs aus dem Verzeichnis den Verzeichnisnamen zu Ihrem lsBefehl hinzuzufügen und ihn über das übergeordnete Verzeichnis auszuführen. Also, ls YourSubdirectoryanstatt nur ls.


45

Es gibt noch einen kürzeren Weg: cd .


3
Interessant. Wie der Kolibri sollte dies logischerweise nicht funktionieren - und doch scheint es so zu sein. Ich gehe davon aus, dass Sie wissen, dass es funktioniert, weil Sie es ausprobiert haben. Haben Sie Unterlagen dazu? Wenn ich also im POSIX / bash-Entwicklungsteam wäre, wäre ich versucht, dies als Fehler zu betrachten. Kennen Sie eine Dokumentation, die besagt, dass es so funktionieren soll ?
G-Man sagt, dass Monica am

3
Wie der Falke schwebt dieser wunderschön über den Blumen - und verschlingt doch Kolibris.
Matt Faus

Ja! so perfekt
chrismarx

1
Das ist die bessere Antwort.
Deddebme

Ah. Ich wusste es! Es musste einen Weg geben. Vielen Dank!
Andersoyvind

10

Es sieht seltsam aus, ist aber kurz und aktualisiert das Verzeichnis:

cd `pwd`

Beachten Sie, dass dies Back Ticks sind, keine einfachen Anführungszeichen um die pwd


2

Was @Kent gesagt hat oder: Entfernen Sie nicht das Verzeichnis, sondern nur den Inhalt. Auf diese Weise können Sie im Verzeichnis bleiben (ohne " cd .. && cd -") und "ls" tut, was Sie erwartet haben.


2

Es wäre besser, wenn Sie das Verzeichnis nicht entfernen, aber stattdessen cd ..; cd -tun könnten cd $PWD.


2

Erstellen Sie einen Alias ​​refresh = "cd .. && cd -", der ein Verzeichnis aufruft und dann erneut in das vorherige Verzeichnis wechselt

Wenn Sie sicher sind, dass Sie wieder eine Auflistung benötigen, können Sie haben

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

Sobald der AILAS erstellt ist, speichern Sie den Alias ​​in Ihrer ~ / .bashrc-Datei, indem Sie dies tun

alias | grep refresh >> ~/.bashrc

damit es beim nächsten Login zur Verfügung steht.


In Unix refreshist out-of-box.
Kenorb

Was meinst du mit "out-of-box"? Als ich es sah, interpretierte ich es als "Standard"; Jetzt frage ich mich, was du meinst. Definieren Sie "UNIX". Cygwin hat keinen "Aktualisierungs" -Befehlsstandard (OK, Cygwin fehlen viele Dinge, die in POSIX / * nix / whatever Standard sind), und mein Linux-System auch nicht.
G-Man sagt, dass Monica am
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.