Я много работаю в Magento, как и многие люди, с которыми я работаю, и раздражает необходимость набирать:
компакт диск ../../../../../../
Чтобы найти только несколько каталогов из корневой папки «httpdocs», я пытаюсь создать скрипт, следующий за этим псевдокодом:
while lowest level directory != httpdocs
cd ../
end while;
Кажется довольно простым, я предполагаю, что мне нужно было бы выполнить некоторую форму grep при проверке, является ли последняя часть текущего рабочего каталога httpdocs, если не просто продолжать подниматься до уровня, пока он не станет правдой.
Я смотрел на изучение bash для этого, хотя кажется, что уже должно быть что-то похожее, и синтаксис озадачивает меня до бесконечности.
источник
cd -
потом, чтобы вернуться туда, где вы были.У меня есть функция,
upto
вызванная в моем .bashrc, которая позволяет вам перейти в любой каталог по текущему пути по имени:У меня также есть завершение для этой функции, так что оно дает мне действительные имена каталогов и завершение, когда я нажимаю Tab:
Кроме того, у меня есть еще одна функция,
jd
которая позволяет мне переходить в любой каталог ниже текущего:Пример:
источник
upto httpdocs
.jd
кажется, не работает в каждом случае, вы не могли бы объяснить, как это работает?**
). Чтобы включить эту функцию в вашей оболочке bash, используйтеshopt -s globstar
.jd
функцию, см. Gist.github.com/Rob--W/5888648 . Я тестировал только с Bash 4.2.45, так что YMMV.Простейшая функция bash, которую вы можете вставить в свою,
.bashrc
которую я могу себе представить (простая, потому что она не использует циклы или внешние процессы):Это использует расширение параметра подстановки Pattern, чтобы заменить все после
/httpdocs/
in$PWD
на `/ httpdocs '. Это выглядит очень грязно, потому что мы должны избегать прямой косой черты в пути, чтобы отличить их от прямой косой черты в синтаксисе расширения bash. Плюс не избегайте косых черт в строке замены, так что это также выглядит противоречивым.Если нет
/httpdocs/
в текущем пути, тогда никакие замены не будут выполнены, и это просто переключится на текущий каталог.Например, подстановка будет заменена
/a/b/c/httpdocs/e/f/g
на/a/b/c/httpdocs
иcd
в этот каталог.Функция должна быть в вашей текущей среде оболочки (как функция или псевдоним), так как дочерний процесс не может изменить текущий каталог своего родителя. Вот почему я говорю, чтобы поместить его в ваш,
.bashrc
а не в сценарии оболочки.источник
Вы также можете добавить что-то вроде этого в свой профиль:
Просто набрав,
cdh
вы попадете в самый верхнийhttpdocs
каталог в вашем текущем пути.источник
Это не полностью решит вашу проблему, но сэкономит
cd ../../../../../../
немного времени. Я заимствовал это из поста пользователя unknown здесь .до N
подпрыгнуть N каталогов вверх в дереве каталогов
Вместо того, чтобы печатать
вы просто печатаете
и
верну тебя
Поместите функцию в ваш .bashrc, чтобы использовать ее.
источник