Jak odświeżyć katalog w BASH?

24

Mam katalog zawierający pliki generowane przez kompilator. Podczas każdej przebudowy katalog ten jest czyszczony, a po kompilacji lsdaje mi puste dane wyjściowe. Po cdwyjściu z katalogu i powrocie do niego działa poprawnie. Pytania są następujące:

  1. Czy jest jakiś inny, bardziej elegancki sposób na odświeżenie katalogu?
  2. Co się dzieje, gdy pliki są usuwane i ponownie tworzone? Dlaczego muszę cdzobaczyć rzeczywistą zawartość katalogu?
rzymski
źródło

Odpowiedzi:

10

Twój skrypt najprawdopodobniej usuwa katalog, a nie tylko znajdujące się tam pliki. Tak więc, gdy masz cdw nim d, a katalog jest usuwany, robisz to lsw katalogu, który tak naprawdę nie istnieje.

Przez cd ..i cd (directory)przechodzisz w górę i z powrotem do (nowo utworzonego) katalogu, a pliki są tam, jak się spodziewasz.

Najlepszą alternatywą jest cdwejście i wyjście z katalogu, dodanie nazwy katalogu do lspolecenia i uruchomienie go z katalogu nadrzędnego. Więc ls YourSubdirectoryzamiast tylko ls.

Kent
źródło
45

Jest jeszcze krótsza droga: cd .

wjr
źródło
3
Ciekawy. Podobnie jak kolibra, to, logicznie rzecz biorąc, nie powinno działać - a jednak wydaje się, że działa. Zakładam, że wiesz, że to działa, ponieważ wypróbowałeś to. Czy masz na to dokumentację? Np. Gdybym był w zespole programistycznym POSIX / bash, miałbym pokusę, aby uznać to za błąd. Czy znasz dokumentację, która mówi, że powinna działać w ten sposób?
G-Man mówi „Przywróć Monikę”
3
Podobnie jak sokół, ten pięknie unosi się nad kwiatami - a jednak pożera kolibry.
Matt Faus
Tak! tak idealne
chrismarx
1
To lepsza odpowiedź.
deddebme,
Ach Wiedziałem! Musiał być jakiś sposób. Dzięki!
andersoyvind
10

Wygląda dziwnie, ale jest krótki i odświeża katalog:

cd `pwd`

Zauważ, że są to tylne tiki, a nie pojedyncze cudzysłowy wokół pwd

użytkownik339088
źródło
2

Co powiedział @Kent lub: nie usuwaj katalogu, ale tylko jego zawartość, w ten sposób możesz pozostać w katalogu (bez „ cd .. && cd -”), a „ls” robi to, czego się spodziewałeś.

ckujau
źródło
2

Byłoby lepiej, gdybyś nie usunął katalogu, ale zamiast tego cd ..; cd -mógłbyś to zrobić cd $PWD.

Miś
źródło
2

utwórz alias refresh = "cd .. && cd -", który przejdzie do katalogu, a następnie ponownie cd do poprzedniego katalogu

jeśli jesteś pewien, że będziesz potrzebować jeszcze raz wpisu, możesz go mieć

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

po utworzeniu ailas zapisz alias w pliku ~ / .bashrc, wykonując

alias | grep refresh >> ~/.bashrc

dzięki czemu będzie dostępny przy następnym logowaniu.

SK176H
źródło
W Uniksie refreshjest gotowy do użycia.
kenorb
Co rozumiesz przez „out-of-box”? Kiedy to zobaczyłem, zinterpretowałem to jako „standard”; teraz zastanawiam się, co masz na myśli. Zdefiniuj „UNIX”. Cygwin nie ma standardu poleceń „odświeżania” (OK, Cygwin brakuje wielu rzeczy, które są standardowe w POSIX / * nix / cokolwiek), podobnie jak mój system Linux.
G-Man mówi „Przywróć Monikę”