Как обновить каталог в 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

user339088
источник
2

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

ckujau
источник
2

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

Тедди
источник
2

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

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

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

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

alias | grep refresh >> ~/.bashrc

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

SK176H
источник
В Unix refreshэто из коробки.
Кенорб
Что вы подразумеваете под "из коробки"? Когда я увидел это, я понял, что это означает «стандарт»; Теперь мне интересно, что вы имеете в виду. Определите «UNIX». У Cygwin нет стандарта команды «обновить» (хорошо, Cygwin не хватает многих вещей, которые являются стандартными в POSIX / * nix / что угодно), как и моя система Linux.
G-Man говорит: «Восстановите Монику»