To wygląda jak błąd w Bash: według man builtins
starego zachowanie jest prawidłowe.
cd [-L|[-P [-e]] [-@]] [dir]
Change the current directory to dir. if dir is not supplied,
the value of the HOME shell variable is the default. Any
additional arguments following dir are ignored.
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:
mkdir ~/bash
cd ~/bash
Pobierz pakiet źródłowy i zależności kompilacji:
apt-get source bash
sudo apt-get build-dep bash
cd bash-4.4
Edytuj, config-top.h
aby to zmienić (powinna być linia 32)
#define CD_COMPLAINS
do tego
/* #define CD_COMPLAINS */
Edytuj debian/changelog
i dodaj taki wpis u góry (możesz także użyć polecenia dch -i
):
bash (4.4-5ubuntu1+cd) artful; urgency=medium
* Fix cd.
-- Firas Kraiem <firas@fkraiem.org> Thu, 04 Jan 2018 21:11:22 +0900
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żyjesz dch -i
, zwiększy on ostatni numer, więc musisz przywrócić go do obecnego) i użyć poprawna nazwa wydania ( artful
tutaj). Wreszcie biegnij dpkg-source --commit
.
Następnie możesz uruchomić debuild
polecenie, a jeśli wszystko pójdzie dobrze (błędy debsign
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 ).
cd
dwie lokalizacje i w jakiś sposób oczekujesz, że zdecyduje, którą z nich chcesz.