Como a conclusão do caminho Bash funciona com o sudo?

10

A conclusão do caminho da guia não funciona (pelo menos no Ubuntu e no AFAIK Arch) com

sudo mount <whatever>

O arquivo iso que estou tentando montar não está em /etc/fstab . Se eu apenas digitar

mount <whatever>

a conclusão funciona (mas é claro que o comando falha porque não sou root). Aparentemente, é sudo que o quebra.

Como a conclusão pode funcionar com o sudo?

É surpreendente que com

sudo umount <whatever>

trabalhos de conclusão. Como isso é alcançado? Olha para /etc/fstab ?

Solução: Acabei de colocar um script de shell em /usr/local/bin que chama sudo mount ... com os argumentos passados para ele. A conclusão funciona ao chamar este script, pois não há sudo no caminho.

    
por Ali 04.02.2012 / 11:01

4 respostas

11

Isso não tem nada a ver com bash , mas depende das conclusões programadas no pacote bash-completion .

De alguns comentários no arquivo /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)
#

Além disso, você encontra no arquivo principal /etc/bash_completion o seguinte comentário, que fala explicitamente sobre os comandos mount e umount :

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

Atualizar :
O comentário sobre os comandos mount e umount foi removido de bash_completion no confirmar :

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

Lançado em < a href="http://anonscm.debian.org/cgit/bash-completion/bash-completion.git/tree/CHANGES?h=2.x#n314"> bash-completion 1.90

    
por 04.02.2012 / 12:35
3

Isso pode ser facilmente resolvido olhando para o Wiki do Arch :

It is useful to have the auto-complete feature (pressing the Tab key twice on the keyboard) after you type some command like sudo.

To do this, add line(s) in this format to your ~/.bashrc file:

complete -cf your_command

For example, to enable auto-complete after sudo and man:

complete -cf sudo
complete -cf man
    
por 04.02.2012 / 16:42
0

Não, não parece na fstab. A conclusão do Bash procura comandos no caminho, aliases no bashrc e / ou bash_profile e caminhos. Então, se você digitar algo como sudo mount /mnt/some_folder , será preenchido automaticamente. Talvez quando você fez o umount estivesse em um caminho relativo para o seu destino e ele fez um preenchimento automático.

    
por 04.02.2012 / 12:04
-1

Eu acho que o bash não quer ser muito complexo e permanecer portável, então eles não vão procurar / dev propor a conclusão de uma operação de montagem.

No entanto, ao chamar umount, ele pode facilmente procurar a saída de df / mount / etc para saber quais dispositivos estão montados e onde.

Talvez o zsh forneça a conclusão para o mount, até mesmo para o autocompletar ao fazer um comando scp ...

    
por 04.02.2012 / 12:19