Niedawno zacząłem od MacOS, ale jest pewne dziwne zachowanie związane z ukończeniem bash
powłoki (w porównaniu do OpenSuse Linux z tcsh, skąd pochodzę), które mnie denerwuje:
Na przykład, kiedy jestem w $ HOME i piszę Pu w wierszu poleceń, a następnie tabuluję, aby zakończyć, oczekiwałem, że jedną z pokazanych opcji będzie mój katalog publiczny /. Dopóki jednak istnieją pliki wykonywalne, dopełnianie nigdy nie pokazuje katalogów o tym samym prefiksie. Dopiero po wejściu w Publ, uzupełnianie tabulacji daje mi Publiczny / ponieważ nie ma już plików wykonywalnych z tym prefiksem.
Moje pytanie brzmiałoby: czy istnieje opcja, aby zakończenie wyświetlało pliki wykonywalne i katalogi z podanym prefiksem?
Próbowałem już zaktualizować wersję bash 4 i zainstalować bash za pomocą homebrew, ale to nie pomogło. Podejrzewam, że albo readline MacOS zachowuje się inaczej, albo że jest więcej ustawień dla .inputrc, o których nie wiem.
Wiem też, że zaczynając od ./ otrzymuję tylko katalogi. To bandaid, którego używam w tej chwili.
Tab
dwukrotnie nacisnąć przycisk? O ile mi wiadomo, wyświetli się lista ukończeń.zsh
zachowuje się tak, jak opisano, alebash
najpierw znajdź bezpośrednio katalogi i pliki wykonywalne. Czy mógłbyś dodać w swoim pytaniu: z jakiej powłoki korzystasz i jaki wynikls -ld Pu*
?bash
w pytaniu. Dane wyjściowe ls to tylkoPublic/
folder. Pliki wykonywalne zaczynające się odPu
znajdują się w niektórych katalogachPATH
. Właściwie dobrze wyjaśniłeś zachowanie w swojej odpowiedzi i mógłbym to zweryfikować.Odpowiedzi:
Dla większości powłok z funkcją rozwijania plików,
argv[0]
pozycja jest rozwijana w jednym z katalogów zmiennej PATH.Jeśli chcesz znaleźć katalogi po wprowadzeniu jako 1. argument w
bash
lubzsh
, po prostu zmodyfikujPATH
w następujący sposób:i przetestuj za pomocą:
Pub
tabDla
tcsh
równoważnej modyfikacji PATH uzyskuje się za pomocą:Ostrzeżenie
Włączenie
.
doPATH
zmiennej stanowi zagrożenie bezpieczeństwa. Od tej modyfikacji każdy plik w katalogu, w którym się znajdujesz, zostanie znaleziony jako standardowe polecenie. Może to doprowadzić do wykonania plików, których nigdy wcześniej nie próbowałbyś wykonać: plików wykonywalnych, które spowodują zrzut pamięci głównej w katalogu programistycznym, lub plików binarnych, które spowodują wykonanie komend w celu uzyskania uprzywilejowanego dostępu do systemu.To ryzyko jest takie samo dla każdego systemu operacyjnego typu Unix.
źródło
PATH
zawierał.
- i to był powód, dla którego ukończenie działało tam inaczej. Ale jeśli chodzi o twoje ostrzeżenie, nie dodam go z powrotem i przyzwyczaję się do używania,./
jeśli chcę ścieżki w moim zakończeniu. Dziękuję Ci.o ile wiem, jest to funkcja, a nie błąd.
możesz po prostu zmienić
tcsh
, oto przewodnik (w końcu musisz zainstalować go przez homebrew, a następnie dostosować ścieżkę)źródło
tcsh
spróbować jeszcze raz, ale tak naprawdę chciałem przejść na coś, co jest szerzej stosowane.shopt
powłoki), aby to działało ....Wypróbuj z ./Pub[tab]
./ sprawia, że jest to bieżący katalog, od którego można rozpocząć uzupełnianie tabulatorów
(Chciałbym wiedzieć, jak to nie jest przydatne, ponieważ działa tak również w systemie Linux?)
źródło