Como atualizo o diretório no BASH?

24

Eu tenho um diretório, contendo arquivos gerados pelo compilador. Durante cada reconstrução, esse diretório é limpo e, após o processo de compilação, lsgera uma saída vazia. Depois que eu cdsaio do diretório e volto a ele, ele funciona corretamente. As perguntas são:

  1. Existe alguma outra maneira mais elegante de atualizar o diretório?
  2. O que realmente acontece quando os arquivos são excluídos e recriados? Por que preciso cdver o conteúdo real do diretório?
romano
fonte

Respostas:

10

Seu script provavelmente está removendo o diretório, e não apenas os arquivos que estão lá. Portanto, quando você cdo acessa e o diretório é removido, você o faz lsem um diretório que na verdade não existe.

Por cd ..e cd (directory)você sobe e volta ao diretório (recém-criado), e os arquivos estão lá conforme o esperado.

A melhor alternativa é, em vez de cdentrar e sair do diretório, é adicionar o nome do diretório ao seu lscomando e executá-lo no diretório pai. Então, ao ls YourSubdirectoryinvés de apenas ls.

Kent
fonte
45

Existe ainda uma maneira mais curta: cd .

wjr
fonte
3
Interessante. Como o beija-flor, isso, logicamente, não deve funcionar - e, no entanto, parece que funciona. Presumo que você saiba que funciona porque você já tentou. Você tem alguma documentação para isso? Ou seja, se eu estivesse na equipe de desenvolvimento do POSIX / bash, ficaria tentado a considerar isso um bug. Você conhece alguma documentação que diz que deveria funcionar dessa maneira?
G-Man diz 'Reinstate Monica'
3
Como o falcão, isso, lindamente, flutua acima das flores - e ainda devora beija-flores.
precisa saber é o seguinte
Sim! tão perfeito
chrismarx
1
Essa é a melhor resposta.
deddebme
Ah Eu sabia! Tinha que haver um jeito. Obrigado!
andersoyvind
10

Parece estranho, mas é curto e atualiza o diretório:

cd `pwd`

Observe que são marcações de volta, não aspas simples ao redor do pwd

user339088
fonte
2

O que o @Kent disse ou: não remova o diretório, mas apenas seu conteúdo, dessa forma você pode permanecer no diretório (sem " cd .. && cd -") e "ls" faz o que você esperava que ele fizesse.

ckujau
fonte
2

Seria melhor se você não removeu o diretório, mas em vez de cd ..; cd -você poderia fazê-lo cd $PWD.

Teddy
fonte
2

crie um alias refresh = "cd .. && cd -" que irá subir um diretório e depois cd novamente no diretório anterior

Se você tiver certeza de que precisará de uma listagem novamente, poderá ter

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

Depois que o ailas for criado, armazene o alias no seu arquivo ~ / .bashrc fazendo

alias | grep refresh >> ~/.bashrc

para que fique disponível na próxima vez que você fizer login.

SK176H
fonte
No Unix refreshestá pronto para o uso.
kenorb
O que você quer dizer com "pronto para uso"? Quando o vi, interpretei como "padrão"; agora estou me perguntando o que você quer dizer. Defina "UNIX". O Cygwin não possui um padrão de comando "refresh" (OK, o Cygwin está faltando muitas coisas padrão no POSIX / * nix / o que quer que seja) e o meu sistema Linux também não.
G-Man diz 'Reinstate Monica'