Kiedy piszę cd ~foo
, chcę, aby bash zabrał mnie do jakiegoś katalogu foo
jako skrót do wpisania pełnej ścieżki do katalogu foo
. i chciałbym móc cp ~foo/bar.txt ~/bar.txt
skopiować plik z /foo/
katalogu do katalogu domowego ... Zasadniczo chcę coś, co działa dokładnie tak ~/
samo, ale gdzie określam, jaki powinien być katalog. [Jestem pewien, że powinienem jfgi, ale nie wiem co do pierdnięcia]
28
Odpowiedzi:
Sposób, w jaki to robiłem, to tworzenie katalogu zawierającego dowiązania symboliczne do katalogów, w których chcesz tworzyć skróty, i dodawanie tego katalogu do CDPATH. CDPATH kontroluje, gdzie
cd
będzie wyszukiwać po przełączeniu katalogów, więc jeśli ten katalog dowiązań symbolicznych znajduje się w twoim CDPATH, możeszcd
natychmiast przejść do dowolnego z dowiązań symbolicznych :Minusem jest to, że nie zadziała, jeśli w twoim bieżącym katalogu znajduje się katalog o nazwie „b” - który ma pierwszeństwo przed CDPATH
Zwykle nie lubię odpowiedzi, które mówią „najpierw musisz przełączyć powłoki”, ale ta dokładna funkcja istnieje w ZSH , jeśli chcesz z niej skorzystać; nazywa się to nazwanymi katalogami . Eksportujesz zmienną
foo
, a kiedy się do~foo
niej odwołujesz , rozwiązuje wartość$foo
. Jest to szczególnie wygodne, ponieważ działa w poleceniach opróczcd
:źródło
Możesz napisać funkcję otoki
cd
i nazwać ją „cd” (ostatecznie funkcja wywołabuiltin cd
- używającbuiltin
słowa kluczowego). Możesz użyć znaku prefiksu, którego Bash nie rozwinie w wierszu poleceń, zanim funkcja go zobaczy, i jest mało prawdopodobne, aby pojawił się jako początkowy znak w nazwach katalogów, na przykład „:”. Chciałbyś, aby był bardziej solidny, ale oto prosty zarys:źródło
z uderzeniem:
~foo
jest zarezerwowany dla katalogu domowego użytkownika foo. Nie polecam tworzenia użytkowników tylko dla tej wygody.Możesz ułatwić sobie (lub trudniej) życie, zmieniając katalogi , ustawiając
CDPATH
zmienną środowiskową (sprawdź jąbash(1)
).Poza tym jedynym sposobem na rozważenie byłoby ustawienie zmiennych środowiskowych dla tych katalogów, które chcesz skrócić.
źródło
Zmienne Bash mogą być użyte do stworzenia systemu zakładek. Zmienne będą działać z każdym poleceniem, a bash wyświetli nazwę zmiennej. W nowszych wersjach bash, jeśli a / jest dołączony do nazwy zmiennej, ścieżkę, którą zawiera zmienna, można również uzupełnić tabulatorami.
Aby zachować trwałość, deklaracje zmiennych można przechowywać w pliku pochodzącym z .bashrc. Ponieważ ten plik jest skryptem bash, może zawierać deklaracje odwołujące się do innych zmiennych, takich jak
aur="${HOME}/AUR"
lub, które działają tylko na niektórych hostachif [[ $HOSTNAME == foo ]]; then bar=baz; fi
, co jest przydatne, jeśli ponownie użyjesz plików konfiguracyjnych na wielu hostach i użytkownikach.Poniższa funkcja bash (do dodania do .bashrc lub z niej uzyskana) umożliwia dodawanie i usuwanie zakładek z pliku zakładek. Jest dość nowy i nie ma gwarancji, że jest wolny od błędów.
źródło
Jednym ze sposobów byłoby utworzenie aliasu dla cd, który zastąpi
~c
pożądaną ścieżkę. Lub po prostu użyj zsh;)źródło
Do zmiany katalogów możesz użyć wcd: Wherever Change Directory
Dzięki temu będzie tak
wcd plugin_root
.źródło
cd
...Mam poniższą funkcję, która utworzy alias w locie,
Kiedy chcę dodać zakładkę do katalogu, po prostu piszę
s dirName
. Tworzy to alias podobny doalias dirName="cd /my/current/directory/;pwd"
. więc mogę wrócić do tego katalogu, po prostu piszącdirName
. Mam wersję, która zapisuje go również w bash_aliases. Działa to w dowolnej powłoce.źródło