Come funziona il completamento del percorso Bash con sudo?


11

Il completamento del percorso della scheda non funziona (almeno su Ubuntu e AFAIK Arch) con

sudo mount <whatever>

Il file ISO che sto cercando di montare non è presente /etc/fstab. Se scrivo e basta

mount <whatever>

il completamento funziona (ma ovviamente il comando fallisce perché non sono root). Apparentemente è sudoquello che lo rompe.

Come può far funzionare il completamento con sudo?

È sorprendente che con

sudo umount <whatever>

lavori di completamento. Come viene raggiunto? Guarda dentro /etc/fstab?

Soluzione: ho appena inserito uno script shell /usr/local/binche chiama sudo mount ...con gli argomenti passati ad esso. Il completamento funziona quando si chiama questo script poiché non è presente sudo.

Risposte:


11

Questo non ha assolutamente a che fare con bash, ma dipende dai completamenti programmati nel pacchetto bash-completion.

Da alcuni commenti nel file /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)
#

Inoltre, nel file principale trovi /etc/bash_completionil seguente commento, che parla esplicitamente mounte umountcomandi:

# 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.
#

Aggiornamento :
Il commento su mounte umountcomandi è stato rimosso dalla bash_completion nel commit :

_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.

Rilasciato inbash-completion 1.90


4

Questo può essere facilmente risolto esaminando Arch Wiki :

È utile avere la funzione di completamento automatico (premendo due volte il tasto Tab sulla tastiera) dopo aver digitato un comando simile sudo.

Per fare ciò, aggiungi le righe in questo formato al tuo ~/.bashrcfile:

completo -cf tuo_comando

Ad esempio, per abilitare il completamento automatico dopo sudoe man:

complete -cf sudo
complete -cf man

Grazie. Si prega di notare che il completamento automatico funziona sorprendentemente bene in caso di sudo umount. Come sottolinea enzotib, questa funzione è stata interrotta mounte l'ultima volta che ho verificato, è stata interrotta anche su Arch.
Ali

Ho appena provato questo su Arch e sudo mount / me <TAB> completa l'unico percorso che ho configurato /etc/fstabche inizia con / media.
Wieland,

Nel mio caso, il file che sto cercando di montare è non è in /etc/fstab. Potresti controllare questo?
Ali

0

No, non sembra in fstab. Il completamento di Bash cerca comandi nel percorso, alias in bashrc e / o bash_profile e percorsi. Quindi, se si digita qualcosa di simile sudo mount /mnt/some_folderdovrebbe completarsi automaticamente. Forse quando l'hai fatto, umounteri in un percorso relativo per la tua destinazione e ha fatto un completamento automatico.


Grazie. Sono sicuro che il completamento automatico non funziona per sudo mount /mnt/some_folder, sicuro al 100%. AFAIK non funziona neanche su Arch Linux. Quando ho fatto il non umountero nel percorso relativo per la destinazione.
Ali

-1

Immagino che bash non voglia essere troppo complesso e rimanere portatile, quindi non guarderanno in / dev per proporre il completamento di un'operazione di mount.

Tuttavia, quando si chiama umount, può facilmente guardare l'output di df / mount / etc per sapere quali dispositivi sono montati e dove.

Forse zsh fornirà il completamento per mount, diamine zsh anche il completamento automatico quando si esegue un comando scp ...


Il file che sto cercando di montare è un file ISO nella mia directory home. Il completamento non funziona. Oh, ho dimenticato, il completamento con il lavoro di montaggio se non uso il sudo. È il sudo che lo rompe. qualche idea?
Ali

Anche usando percorsi assoluti? / home / user / myiso <TAB> -> myisofile.iso. debug con sudo echo $ SHELL; sudo pwd, si spera che ti possa dare alcuni spunti.
Aki,

Sì, con percorsi assoluti. Proverò il debug che suggerisci. Il debug che suggerisci dà /bin/bash /home/alicome previsto.
Ali
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.