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?

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.


45

Existe ainda uma maneira mais curta: cd .


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


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.


2

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


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.


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'
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.