Korzystam z systemu Windows i Ubuntu równolegle i robię konsole na obu urządzeniach.
W systemie Windows mogę zrobić
C:\Users\Thomas>cd..\..
C:\>
Jednak w systemie Linux nie działa to ani z ukośnikami odwrotnymi, ani z ukośnikami do przodu.
21:17:10 $ cd../..
bash: cd../..: No such file or directory
Ponieważ często popełniam ten błąd, próbowałem zdefiniować alias .bash_aliases
dla tej sytuacji:
alias cd../..='cd ../..'
alias cd..\..='cd ../..'
Kiedy zaczynam nowy bash, dostaję
21:16:26 $ bash
bash: alias: `cd../..': invalid alias name
Jak skonfigurować aliasy cd..\..
i cd../..
poprawnie?
cd..\..
Wydaje się mieć problemy ze znakiem ucieczki:
21:39:43 $ cd..\..
bash: cd....: command not found
To nie działa, nawet jeśli zdefiniuję inny alias cd....
.
/
znaku. Z\
drugiej strony wersja powinna działać dobrze.man bash
: Znaki /, $, `i = oraz dowolne z wyżej wymienionych metaznaków powłoki lub znaki cytowania wymienione powyżej mogą nie pojawiać się w nazwie aliasu.man alias
i to nie istniało. Jeśli podasz tę odpowiedź, zaakceptuję ją.Odpowiedzi:
/
i\
należą do znaków, które nie mogą występować w aliasie Bash. Odman bash
:Aby obejść ten problem, możesz przełączyć się na Zsh, co umożliwia zarówno:
źródło
Nie można używać ukośników w nazwie aliasu. Bash dopuszcza je jednak w nazwach funkcji, dzięki czemu można ustawić tę funkcję:
Nie można używać odwrotnych ukośników w aliasie lub nazwie funkcji. Znak odwrotnego ukośnika cytuje następny znak, więc
cd..\..
jest analizowany jakocd....
, zanim ten ciąg zostanie wyszukany jako nazwa polecenia. Jeśli chcesz wywołać polecenie o nazwiecd..\..
, należy wpisaćcd..\\..
,'cd..\..'
albo coś równoważne. Co więcej, nazwa polecenia, która została cytowana w jakikolwiek sposób, nie jest brana pod uwagę przy wyszukiwaniu aliasów, więc nigdy nie można użyć nazwy aliasu zawierającej ukośnik odwrotny. Bash nie dopuszcza również odwrotnych ukośników w nazwach funkcji. Ponieważcd..\..
jest analizowany jakocd....
, możesz zdefiniować funkcję o nazwiecd....
(jak wyżej).Jeśli użyjesz
cd
polecenia, będziesz musiał wpisać spację po nim, tak jak każde inne polecenie. Ale możesz zaoszczędzić na pisaniu, zupełnie nie pisząccd
. Ustawautocd
opcję za pomocą następującego wiersza w~/.bashrc
:Następnie możesz wpisać nazwę katalogu w wierszu poleceń, a „wykonanie” tego katalogu zmieni się na niego.
źródło
shopt
, prawdopodobnie wkrótce przegapię tę funkcję w systemie Windows :-)autocd
był jednym z powodów, dla których przestawiłem się na Zsh, kiedy bash go nie miał. Jedynym przyzwoitym sposobem korzystania z systemu Windows jest zainstalowanie Cygwin, wraz z zsh.„Nie możesz używać ukośników w aliasie lub nazwie funkcji ”? To dla mnie wiadomość. Od lat używam następującej funkcji powłoki w Linuksie i OS X bash i nigdy nie miałem żadnych problemów:
Oczywiście
cd../..
jest to również dobra nazwa funkcji. W nazwie funkcji powłoki można użyć ukośnika .Jeśli chodzi o wersję z odwrotnym ukośnikiem, nie możesz osadzić jej w aliasie lub nazwie funkcji, ale nie musisz: Gdy
cd..\..
piszesz, bash interpretuje odwrotny ukośnik jako ucieczkę i próbuje wykonać wynikowy wynikcd....
. Zdefiniuj to i możesz zrobić wszystko, czego szukałeś. Zapraszamy.źródło
Jeśli chcesz zachować aliasy, dlaczego po prostu nie:
Lub, jeśli trzeba przejść drogę z powrotem:
Nie mam pojęcia, jak dobrze pomaga to w synchronizacji mentalnej z mózgiem Windows, ale nadal wydaje się to prostą drogą. (Przynajmniej dla tych z nas, którzy mają szczęście, że nie muszą się martwić, jak to się dzieje w systemie Windows).
źródło