zakończenie bash w terminalu - pliki vs foldery


2

Niedawno zacząłem od MacOS, ale jest pewne dziwne zachowanie związane z ukończeniem bashpowł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.


Czy próbowałeś Tabdwukrotnie nacisnąć przycisk? O ile mi wiadomo, wyświetli się lista ukończeń.
Anton Todorov

Tak. Dodam to do początkowego pytania w celu wyjaśnienia.
shiin

Na moim komputerze Mac z systemem Mavericks zshzachowuje się tak, jak opisano, ale bashnajpierw znajdź bezpośrednio katalogi i pliki wykonywalne. Czy mógłbyś dodać w swoim pytaniu: z jakiej powłoki korzystasz i jaki wynik ls -ld Pu*?
dn

Podałem, że użyłem bashw pytaniu. Dane wyjściowe ls to tylko Public/folder. Pliki wykonywalne zaczynające się od Puznajdują się w niektórych katalogach PATH. Właściwie dobrze wyjaśniłeś zachowanie w swojej odpowiedzi i mógłbym to zweryfikować.
shiin

Odpowiedzi:


1

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 bashlub zsh, po prostu zmodyfikuj PATHw następujący sposób:

PATH=${PATH}:.

i przetestuj za pomocą:

Pubtab

Dla tcshrównoważnej modyfikacji PATH uzyskuje się za pomocą:

setenv PATH ${PATH}:.

Ostrzeżenie

Włączenie .do PATHzmiennej 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.


Dziękuję Ci. Właśnie sprawdziłem na moim starym komputerze na Uniwersytecie i tam domyślnie PATHzawierał .- 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.
shiin

Mądry i bezpieczny ruch :).
dn

1

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ę)


Dziękuję za Twoją odpowiedź. Nie wiedziałem, że została uznana za funkcję - a przynajmniej taką, której nie można wyłączyć. Mógłbym tcshspróbować jeszcze raz, ale tak naprawdę chciałem przejść na coś, co jest szerzej stosowane.
shiin

Och .. OK, ale możesz spróbować ustawić opcje bash (opcje shoptpowłoki), aby to działało ....
Schwertspize

-3

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?)


Chyba dlatego, że już wspomniałem o tej opcji w moim pytaniu. Ale jest to ważna kwestia i prawdopodobnie powinienem to jaśniej wyrazić w początkowym pytaniu.
shiin
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.