Jak działa uzupełnianie ścieżki Bash w sudo?


11

Uzupełnianie ścieżki tabulatorów nie działa (przynajmniej w Ubuntu i AFAIK Arch) z

sudo mount <whatever>

Plik ISO, który próbuję zamontować, nie istnieje /etc/fstab. Jeśli tylko piszę

mount <whatever>

zakończenie działa (ale oczywiście polecenie kończy się niepowodzeniem, ponieważ nie jestem rootem). Najwyraźniej to go sudopsuje.

Jak sprawić, by ukończenie działało z sudo?

Zaskakujące jest to

sudo umount <whatever>

prace wykończeniowe. Jak to się osiąga? Czy to wygląda /etc/fstab?

Rozwiązanie: Właśnie wstawiłem skrypt powłoki do /usr/local/bintych wywołań sudo mount ...wraz z przekazanymi argumentami. Uzupełnianie działa podczas wywoływania tego skryptu, ponieważ nie ma żadnej sudoprzeszkody.

Odpowiedzi:


11

To w ogóle nie ma nic wspólnego bash, ale zależy to od uzupełnień zaprogramowanych w pakiecie bash-completion.

Z niektórych komentarzy w pliku /etc/bash_completion.d/mount:

# mount(8) completion. This will pull a list of possible mounts out of
# /etc/{,v}fstab, unless the word being completed contains a ':', which
# would indicate the specification of an NFS server. In that case, we
# query the server for a list of all available exports and complete on
# that instead.
#

# umount(8) completion. This relies on the mount point being the third
# space-delimited field in the output of mount(8)
#

Ponadto, można znaleźć w głównym pliku /etc/bash_completionnastępujący komentarz, który wyraźnie mówić mounti umountpoleceniami:

# A meta-command completion function for commands like sudo(8), which need to
# first complete on a command, then complete according to that command's own
# completion definition - currently not quite foolproof (e.g. mount and umount
# don't work properly), but still quite useful.
#

Aktualizacja :
Komentarz na temat mounti umountpoleceń został usunięty ze bash_completion w popełnienia :

_command_offset: Restore compopts used by called command.

This fixes completions that rely on their compopts, most notably
mount(8).
Fixes bash-completion bug #313183.

Wydany wbash-completion 1.90


4

Można to łatwo rozwiązać, przeglądając Arch Wiki :

Przydaje się funkcja autouzupełniania (dwukrotne naciśnięcie klawisza Tab na klawiaturze) po wpisaniu jakiegoś polecenia sudo.

Aby to zrobić, dodaj do ~/.bashrcpliku wiersze w tym formacie :

uzupełnij -cf twoje_komenda

Na przykład, aby włączyć automatyczne uzupełnianie po sudoi man:

complete -cf sudo
complete -cf man

Dzięki. Pamiętaj, że automatyczne uzupełnianie działa zaskakująco dobrze w przypadku sudo umount. Jak wskazuje enzotib, ta funkcja jest zepsuta, mounta kiedy ostatni raz sprawdzałem, została również zepsuta na Arch.
Ali

Właśnie próbowałem tego na Arch i sudo mount / me <TAB> kończy się na jedynej ścieżce, którą skonfigurowałem, /etc/fstabktóra zaczyna się od / media.
Wieland

W moim przypadku, plik Próbuję zamontować jest nie w /etc/fstab. Czy możesz to sprawdzić?
Ali

0

Nie, to nie wygląda na fstab. Zakończenie bash szuka poleceń w ścieżce, aliasów w bashrc i / lub bash_profile oraz ścieżek. Więc jeśli wpiszesz coś takiego sudo mount /mnt/some_folder, powinno się ono automatycznie uzupełniać. Może kiedy to zrobiłeś umount, znajdowałeś się na względnej ścieżce do miejsca docelowego i wykonał on autouzupełnianie.


Dzięki. Jestem pewien, że autouzupełnianie nie działa sudo mount /mnt/some_folder, 100% pewności. AFAIK też nie działa na Arch Linux. Kiedy to zrobiłem, nie umountbyłem na ścieżce względnej dla miejsca docelowego.
Ali

-1

Myślę, że bash nie chce być zbyt skomplikowany i pozostać przenośny, więc nie będą szukać w / dev, aby zaproponować zakończenie operacji montowania.

Jednak podczas wywoływania umount może łatwo sprawdzić dane wyjściowe df / mount / etc, aby dowiedzieć się, które urządzenia są zamontowane i gdzie.

Może zsh zapewni zakończenie dla montowania, do cholery zsh nawet autouzupełnianie podczas wykonywania polecenia scp ...


Plik, który próbuję zamontować, to plik ISO w moim katalogu domowym. Zakończenie nie działa. Och, zapomniałem o zakończeniu pracy z mountem, jeśli nie użyję sudo. To sudo to psuje. jakieś pomysły?
Ali

Nawet używając absolutnych ścieżek? / home / user / myiso <TAB> -> myisofile.iso. debuguj za pomocą echa sudo $ SHELL; sudo pwd, mam nadzieję, że da ci to trochę wglądu.
Aki

Tak, z absolutnymi ścieżkami. Spróbuję zaproponowanego przez ciebie debugowania. Sugerowane debugowanie przebiega /bin/bash /home/alizgodnie z oczekiwaniami.
Ali
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.