Come posso aggiornare la directory in BASH?


24

Ho una directory, contenente file generati dal compilatore. Durante ogni ricostruzione questa directory viene pulita e, dopo il processo di compilazione, lsmi dà un output vuoto. Dopo che sono cduscito dalla directory e poi di nuovo, funziona bene. Le domande sono:

  1. Esiste un altro modo più elegante per aggiornare la directory?
  2. Cosa succede realmente quando i file vengono eliminati e ricreati? Perché devo cdvedere il contenuto effettivo della directory?

Risposte:


10

Molto probabilmente lo script rimuove la directory e non solo i file presenti. Quindi, quando ci sei cddentro e la directory viene rimossa, lo fai lssu una directory che in realtà non esiste.

Di cd ..e cd (directory)ti sposti su e indietro nella directory (appena creata), e i file sono lì come ti aspetti.

La migliore alternativa è invece di cdentrare e uscire dalla directory, è aggiungere il nome della directory al lscomando ed eseguirlo dalla directory principale. Quindi, ls YourSubdirectoryinvece di solo ls.


45

C'è anche un modo più breve: cd .


3
Interessante. Come il colibrì, questo, logicamente, non dovrebbe funzionare - eppure sembra che funzioni. Presumo che tu sappia che funziona perché l'hai provato. Hai qualche documentazione per questo? Cioè, se fossi nel team di sviluppo POSIX / bash, sarei tentato di considerare questo un bug. Conosci qualche documentazione che dice che dovrebbe funzionare in questo modo?
G-Man dice "Ripristina Monica" il

3
Come il falco, questo, meravigliosamente, galleggia sopra i fiori - eppure divora i colibrì.
Matt Faus,

Sì! così perfetto
chrismarx

1
Questa è la risposta migliore
deddebme,

Ah. Lo sapevo! Doveva esserci un modo. Grazie!
Andersoyvind,

10

Sembra strano, ma è breve e aggiorna la directory:

cd `pwd`

Nota che sono segni di spunta, non virgolette singole attorno alla pwd


2

Cosa ha detto @Kent o: non rimuovere la directory ma solo il suo contenuto, in questo modo puoi rimanere nella directory (senza " cd .. && cd -") e "ls" fa quello che ti aspettavi che facesse.


2

Sarebbe meglio se non si rimuovesse la directory, ma invece cd ..; cd -si potesse fare cd $PWD.


2

create a alias refresh = "cd .. && cd -" che salirà una directory e poi di nuovo cd nella directory precedente

se sei sicuro di aver bisogno di un nuovo elenco, puoi averlo

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

una volta creato il file, archiviare l'alias nel file ~ / .bashrc eseguendo

alias | grep refresh >> ~/.bashrc

in modo che sia disponibile al prossimo accesso.


In Unix refreshè pronto all'uso.
Kenorb,

Cosa intendi con "out-of-box"? Quando l'ho visto, l'ho interpretato nel senso di "standard"; ora mi chiedo cosa intendi. Definire "UNIX". Cygwin non ha uno standard di comando "aggiorna" (OK, a Cygwin mancano molte cose che sono standard in POSIX / * nix / qualunque), e nemmeno il mio sistema Linux.
G-Man dice "Ripristina Monica" il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.