Właśnie zaktualizowałem Ubuntu 16.04 do 17.04 i znalazłem mały problem z cd
poleceniem.
Powiedzmy, że mam dwa foldery: album-01
ialbum-02
W Ubuntu 16.04, jeśli to zrobię cd album*
, przejdzie do pierwszego znalezionego folderualbum-01
Ale w nowym Ubuntu 17.04, jeśli to zrobię, cd album*
to wynik
-bash: cd: too many arguments
Jak zrobić cd
w Ubuntu 17.04 jak cd
w Ubuntu 16.04?
command-line
bash
cd-command
Chaty
źródło
źródło
cd
dwie lokalizacje i w jakiś sposób oczekujesz, że zdecyduje, którą z nich chcesz.Odpowiedzi:
Nie mogłem jeszcze przetestować tego na prawdziwym systemie 17.04 (tylko zweryfikowałem, że działa on na 16.04), ale powinieneś być w stanie zastąpić
cd
wbudowane polecenie Bash własną funkcją niestandardową, która odrzuca wszelkie dodatkowe argumenty oprócz pierwszego :Aktualizacja: Jak sugerowano w komentarzu @ muru , ta wersja poniżej może działać lepiej i obsługiwać wywoływanie
cd
bez argumentów:Po wprowadzeniu tej linii powyżej w terminalu sprawdź, czy
cd
teraz działa tak, jak chcesz. W takim przypadku można uczynić tę funkcję trwałą, dodając tę linię na końcu~/.bashrc
pliku. W przeciwnym razie zniknie, gdy tylko zakończysz bieżącą sesję powłoki.Zauważ, że jeśli z jakiegokolwiek powodu musisz tymczasowo użyć prawdziwej
cd
wbudowanej komendy Bash zamiast tej funkcji niestandardowej, możesz po prostu wywołać jącommand cd
zamiast zwykłejcd
.źródło
.sh
pliku, a następnie utworzyłem alias:mcd="source /home/user/bin/cd.sh"
cd () { builtin cd "${@:1:1}"; }
zamiast tego.Krótka odpowiedź / obejście
Aby odpowiedzieć na twoje pytanie w tym konkretnym przypadku, działa
Ale prawdopodobnie nie jest to funkcjonalność, której naprawdę chcesz.
Co się zmieniło?
Wygląda na to, że
config-top.h
w Bash-4.4 został zaktualizowany, aby dodać następującą opcjęI
builtins/cd.def
odnosi się do twojego błędu tutaj:Co mogę zrobić długoterminowo ?:
Możesz skompilować swój własny
bash
bez nowych CD_COMPLAINS , ale byłoby to uciążliwe. Możesz ponownie zdefiniowaćcd
funkcjonalność, jak to sugerowano tutaj, lub możesz aliasować taką funkcjęUdowadniając to
Bash 4.4 Beta tam, gdzie nadal działa
Bash 4.4 Wersja stabilna tam, gdzie nie działa
źródło
cd alb*1
dopasować literał1
na końcu, nawet bez nawiasów. Na początku pomyliłem twój pomysł z czymś innym.Nigdy nie spotkałem się z tym problemem, ponieważ zawsze używam Uzupełniania tabulatorów.
Więc w twoim przypadku, zamiast nieprecyzyjnego zgadywania, który katalog chcę, piszę,
cd al
Tabktóry, jeśli jest tylko jedno dopasowanie, uzupełnia go, a jeśli są 2 lub więcej uzupełnia do miejsca, w którym dopasowanie kończy się i TabTabzawiera listę opcji.Oto przykład z mojego systemu:
cd Un
Taba następnie TabTabprodukuje
źródło
To wygląda jak błąd w Bash: według
man builtins
starego zachowanie jest prawidłowe.Możesz zgłosić błąd na
bug-bash
liście mailingowej; więcej szczegółów tutaj .Faktycznie błąd został zgłoszony (dawno temu). Jeśli chcesz teraz naprawić Bash, teraz, teraz , jak to zrobić poprawnie (testowane 17.10, powinno działać również na innych).
Najpierw utwórz katalog do pracy, na przykład:
Pobierz pakiet źródłowy i zależności kompilacji:
Edytuj,
config-top.h
aby to zmienić (powinna być linia 32)do tego
Edytuj
debian/changelog
i dodaj taki wpis u góry (możesz także użyć poleceniadch -i
):Najważniejsze punkty to dołączenie
+foo
do bieżącego numeru wersji (foo
może to być dowolny ciąg małych liter; i uważaj, jeśli go użyjeszdch -i
, zwiększy on ostatni numer, więc musisz przywrócić go do obecnego) i użyć poprawna nazwa wydania (artful
tutaj). Wreszcie biegnijdpkg-source --commit
.Następnie możesz uruchomić
debuild
polecenie, a jeśli wszystko pójdzie dobrze (błędydebsign
można zignorować), powinieneś mieć trochę.deb
s w katalogu nadrzędnym, który możesz zainstalować jak zwykle (nie ma potrzeby instalowania wszystkich, tylko tych już teraz; użyj,dpkg -l | grep bash
aby się dowiedzieć).Zauważ, że numer wersji nowego pakietu jest ustawiony tak, że będziesz automatycznie otrzymywać wszelkie przyszłe aktualizacje do
bash
; jeśli aktualizacja nie rozwiąże problemu, musisz powtórzyć powyższy proces.(Ta odpowiedź została po raz pierwszy opublikowana na to zduplikowane pytanie ).
źródło