Dużo pracuję w Magento, podobnie jak wielu ludzi, z którymi pracuję, a pisanie:
Płyta CD ../../../../../../
Aby się dowiedzieć, wciąż masz kilka katalogów z głównego katalogu „httpdocs”, dlatego próbuję utworzyć skrypt, który będzie działał zgodnie z tym pseudo-kodem:
while lowest level directory != httpdocs
cd ../
end while;
Wydaje się to dość proste, zakładam, że musiałbym zrobić jakąś formę grep, sprawdzając, czy ostatnia część bieżącego katalogu roboczego to httpdocs, jeśli nie, po prostu przechodź o jeden poziom wyżej, aż to prawda.
Przyglądałem się temu nauce basha, choć wydaje się, że musi być już coś podobnego, a składnia mnie zastanawia.
źródło
cd -
czegoś, aby wrócić do miejsca, w którym byłeś.Mam funkcję wywoływaną
upto
w moim .bashrc, która pozwala przejść do dowolnego katalogu na bieżącej ścieżce według nazwy:Mam również uzupełnienie tej funkcji, dzięki czemu mogę uzyskać prawidłowe nazwy katalogów i uzupełnienie po naciśnięciu klawisza Tab:
Ponadto mam inną funkcję,
jd
która pozwala mi przejść do dowolnego katalogu poniżej bieżącego:Przykład:
źródło
upto httpdocs
.jd
nie wydaje się działać w każdym przypadku, czy mógłbyś wyjaśnić, jak to działa?**
). Aby włączyć tę funkcję w powłoce bash, użyjshopt -s globstar
.jd
funkcję dynamicznego wykrywania i aktywacji shopt , patrz gist.github.com/Rob--W/5888648 . Testowałem go tylko z Bash 4.2.45, więc YMMV.Najprostsza funkcja bash, którą możesz włożyć do swojej
.bashrc
, o której mogę pomyśleć (prosta, ponieważ nie używa pętli ani procesów zewnętrznych):Używa to rozszerzenia parametru podstawiania Wzorca, aby zastąpić wszystko po
/httpdocs/
w$PWD
`/ httpdocs '. Wygląda to bardzo niechlujnie, ponieważ musimy uciec przed ukośnikami na ścieżce, aby odróżnić je od ukośników w składni rozszerzenia bash. Plus nie unikaj ukośników w zastępującym ciągu, więc wygląda również niespójnie.Jeśli nie ma
/httpdocs/
w bieżącej ścieżce, nie zostaną wykonane żadne podstawienia i zmieni się tylko w bieżący katalog.Na przykład, podstawienie zastąpi
/a/b/c/httpdocs/e/f/g
z/a/b/c/httpdocs
icd
do tego katalogu.Funkcja musi znajdować się w bieżącym środowisku powłoki (jako funkcja lub alias), ponieważ proces potomny nie może zmienić bieżącego katalogu swojego rodzica. Dlatego mówię, aby umieścić go w swoim,
.bashrc
a nie w skrypcie powłoki.źródło
Możesz również umieścić coś takiego w swoim profilu:
Już samo wpisanie
cdh
przeniesie Cię do najwyższegohttpdocs
katalogu w twojej bieżącej ścieżce.źródło
Nie rozwiązuje to całkowicie twojego problemu, ale zaoszczędzi
cd ../../../../../../
trochę. Pożyczyłem to od posta użytkownika nieznanego tutaj .w górę N.
przeskocz N katalogów w górę w drzewie katalogów
Zamiast pisać
po prostu piszesz
i a
przywiezie cię z powrotem
Umieść tę funkcję w pliku .bashrc, aby z niej skorzystać.
źródło