Czasami, gdy chcę zmienić katalog nadrzędny, błędnie wpisuję cd ,,
zamiast cd ..
. Czy jest jakiś sposób, w jaki bash może uznać te stwierdzenia za takie same? W moich poleceniach nigdy nie używam przecinków. Idealnie, chciałbym aliasu ,,
do ..
. Kiedy to spróbowałem, nie zadziałało. Dlaczego to nie zadziałało? Jak inaczej mogę podejść do tego problemu?
$ alias ,,=..
$ cd ,,
-bash: cd: ,,: No such file or directory
$ ,,
by narzekać, takie jak:bash: ..: Is a directory
. (Innymi słowy, nie jest to plik wykonywalny.)alias 'cd ,,'='cd ..'
. Cóż, mógłbyś, ale musiałbyś go uruchomić,cd\ ,,
żeby to wszystko było jednym słowem.)alias -g ,,=..
icd ,,
działa zgodnie z oczekiwaniami.find / -type d -exec ln -s .. {}/,, \;
... ;-)Odpowiedzi:
ZSH:
Jeśli korzystasz z
zsh
alias -g ,,=".."
tego, czego potrzebujesz, ale spowoduje to rozszerzenie „,,” wszędzie, nie tylko w połączeniu zcd
.Od
man zshbuiltins
:GRZMOTNĄĆ:
Jeśli jest to ograniczone
bash
(ponieważ pytanie jest oznaczone tagiem bash ), przeczytaj następujące informacje:Jest to rozwiązanie czysto aliasowe, zgodnie z żądaniem, jednak będzie to więcej niż wymagało, prawdopodobnie frustrujące użytkownika (zobacz ostrzeżenie na końcu mojego postu).
Cytat
man bash
:Dlatego wystarczy alias
cd
z dodatkową spacją (aby umożliwić rozwinięcie następnego argumentu), a następnie alias,,
do..
. Zobaczyć, żedaje dokładnie to, czego potrzebujesz.
Zauważ, że jest to poprawne nie tylko dla
bash
(i jegoalias
implementacji), ale dla wszystkich powłok kompilujących POSIX. Cytując przykład zman 1p alias
(podręcznik nie opisuje tej funkcji wyraźnie, tylko na przykładzie):Ostrzeżenie: Jak pisze @PeterCordes w swoim komentarzu, spowoduje to automatyczne rozszerzenie innych aliasów po zapisaniu
cd
. Może zaistnieć potrzeba napisania,cd \grep
jeśli chcesz zmienić katalog na inny,grep
ale twójgrep
jest aliasem dlagrep --color=auto
. Bez odwrotnego ukośnikacd
zgłosi błąd „zbyt wiele argumentów” (nie możnacd
dwóch katalogów naraz) !.źródło
cd
wejść do katalogu jego kodu źródłowego. Lub inne kolizje między twoimi aliasami a popularnymi nazwami katalogów. Podobniecd dr
jakcd disown -r
dla mnie, z tym pseudonimem. W każdym razie o wiele lepiej jest zastąpić wbudowanącd
funkcję dla rzeczy takich jak IMO.Aliasy nie mają tego robić, ale możesz utworzyć funkcję o nazwie,
cd
która jest opakowaniem dla prawdziwychcd
. Ten działa dla mnie! Po prostu umieść go w wybranym.bash_profile
pliku swojego profilu.Lub z komentarzami i ładnym formatowaniem:
EDYTOWAĆ
Dzięki @derobert za wskazanie, że
if then else
tutaj jest lepiej niż&& ||
. Właśnie zrozumiałem ( * facepalm *), że ta implementacja będzie działać tylko wtedy, gdy argumenty inne niż ścieżki (tj.-L -P
) Nie są pierwszym argumentem. Więc ostrzegaj, jeśli masz zły nawyk pisania,cd -L ,,
to ci nie pomoże. Myślę, że jest to nieistotne, aby postępować poprawnie.źródło
$1
przed wykonaniem wbudowanego:cd () { [ "$1" = ",," ] && set .. ; cd "$@"; }
set .. "${@:2}"
lub stracisz wszystko po pierwszym argumencie...
nie musi to być pierwszy argument;cd
wbash
może przybierać różne opcje (-P
,-L
,-@
,-e
).Aliasy muszą być pierwszym słowem polecenia. Ponadto alias musi zostać zastąpiony słowem, więc nie ma spacji.
Mógłbyś obu sobie
..
i,,
byćcd ..
.źródło
cd ..
..
w Bash jest to,shopt -s autocd
że możesz zmienić katalog na dowolny, wpisując jego nazwę. Oczywiście nadal pseudonim dla,,
Innym sposobem na
..
zmianę katalogu jest włączenieautocd
funkcji Basha :To automatycznie zmieni katalog po wprowadzeniu nazwy jednego:
Nadal musisz utworzyć alias,
,,
ale można to zrobić za pomocą justalias ,,=..
źródło
Istnieje już
aplikacjado tego skryptu: https://github.com/shyiko/commacd (brak powiązań ze Stanleyem Shuyiko).Aby odpowiedzieć na twoje pytanie, skrypt aliasuje przecinki do trzech funkcji, które definiuje:
źródło