Як оновити каталог в BASH?


24

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

  1. Чи є якийсь інший, більш елегантний спосіб оновити каталог?
  2. Що насправді відбувається при видаленні та відтворенні файлів? Чому мені потрібно cdпереглянути фактичний вміст каталогу?

Відповіді:


10

Ваш сценарій, швидше за все, видаляє каталог, а не лише ті файли, які там є. Отже, коли ви ввійшли cdв нього, а каталог видалено, ви працюєте lsз каталогом, який насправді не існує.

До cd ..і cd (directory)ви рухатися вгору і назад в (новоствореної) директорії і файли там , як ви очікуєте.

Найкраща альтернатива - замість того, cdщоб входити і виходити з каталогу, - додати ім'я каталогу до вашої lsкоманди та запустити його з батьківського каталогу. Тож ls YourSubdirectoryзамість просто ls.


45

Існує навіть коротший шлях: cd .


3
Цікаво. Як і колібрі, це, логічно, не повинно працювати - і все ж здається, що це так і є. Я припускаю, що ви знаєте, що це працює, тому що ви спробували це. У вас є документація на це? Тобто, якби я був у команді розвитку POSIX / bash, я би спокусився вважати це помилкою. Чи знаєте ви будь-яку документацію, яка говорить про те, що вона повинна працювати так?
G-Man каже: "Відновити Моніку"

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

Так! так ідеально
chrismarx

1
Це краща відповідь.
деддебм

Ага. Я це знав! Мав бути спосіб. Спасибі!
andersoyvind

10

Це виглядає дивним, але воно коротке і оновить каталог:

cd `pwd`

Зауважте, що це зворотні кліщі, а не поодинокі цитати навколо pwd


2

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


2

Було б краще, якби ви не видалили каталог, а замість цього cd ..; cd -можете зробити cd $PWD.


2

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

якщо ви впевнені, що вам знову знадобиться список, який ви можете мати

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

після створення ailas зберігайте псевдонім у вашому файлі ~ / .bashrc, виконуючи це

alias | grep refresh >> ~/.bashrc

щоб він був доступний наступного разу при вході в систему.


У Unix refreshнестандартно.
kenorb

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