Как обновить каталог в BASH?


24

У меня есть каталог, содержащий файлы, сгенерированные компилятором. Во время каждой перестройки этот каталог очищается и после процесса сборки lsвыдает пустой вывод. После того, как я cdвышел из каталога, а затем вернулся к нему, ls работает правильно. Вопросы:

  1. Есть ли другой, более элегантный способ обновить каталог?
  2. Что на самом деле происходит, когда файлы удаляются и воссоздаются? Зачем мне нужно cdвидеть фактическое содержимое каталога?

Ответы:


10

Ваш скрипт скорее всего удаляет каталог, а не только файлы, которые там находятся. Итак, когда вы cdвошли в него, и каталог был удален, вы lsработаете с каталогом, который на самом деле не существует.

По cd ..и cd (directory)вы переместитесь вверх и назад в (вновь созданный) каталог, и файлы будут там, как вы ожидаете.

Лучшая альтернатива - вместо того, чтобы cdвходить и выходить из каталога, это добавлять имя каталога к вашей lsкоманде и запускать его из родительского каталога. Итак, ls YourSubdirectoryвместо всего ls.


45

Есть даже более короткий путь: cd .


3
Интересный. Как и колибри, это, по логике, не должно работать - и все же кажется, что это работает. Я предполагаю, что вы знаете, что это работает, потому что вы попробовали это. У вас есть какие-либо документы для этого? Т.е., если бы я был в команде разработчиков POSIX / bash, я бы соблазнился считать это ошибкой. Знаете ли вы какую-либо документацию, в которой говорится, что она должна работать таким образом?
G-Man говорит: «Восстанови Монику»

3
Подобно соколу, это прекрасно плавает над цветами - и все же пожирает колибри.
Мэтт Фаус

Да! так идеально
Крисмаркс

1
Это лучший ответ.
deddebme

Ах. Я знал это! Должен был быть способ. Благодарность!
Андерсойвинд

10

Это выглядит странно, но это коротко и обновляет каталог:

cd `pwd`

Обратите внимание, что это обратные тики, а не одиночные кавычки вокруг pwd


2

Что сказал @Kent или: не удаляйте каталог, а только его содержимое, так что вы можете остаться в каталоге (без " cd .. && cd -"), а "ls" сделает то, что вы ожидали.


2

Было бы лучше, если бы вы не удаляли каталог, а вместо этого cd ..; cd -могли это сделать cd $PWD.


2

создайте псевдоним refresh = "cd .. && cd -", который перейдет в каталог, а затем снова перейдет в предыдущий каталог

если вы уверены, что вам снова понадобится список, вы можете иметь

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

как только ailas будет создан, сохраните псевдоним в файле ~ / .bashrc, выполнив

alias | grep refresh >> ~/.bashrc

чтобы он был доступен при следующем входе в систему.


В Unix refreshэто из коробки.
Кенорб

Что вы подразумеваете под "из коробки"? Когда я увидел это, я понял, что это означает «стандарт»; Теперь мне интересно, что вы имеете в виду. Определите «UNIX». У Cygwin нет стандарта команды «обновить» (хорошо, Cygwin не хватает многих вещей, которые являются стандартными в POSIX / * nix / что угодно), как и моя система Linux.
G-Man говорит: «Восстановите Монику»
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.