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.