Uma solução é usar a opção nospace
para o complete
construído .
Primeiro, você precisa saber como a conclusão está definida para ls
$ complete -p ls
complete -F _longopt ls
Então você modifica adicionando -o nospace
$ complete -o nospace -F _longopt ls
Assim, mesmo se você pressionar Tab ↹ várias vezes, não haverá correspondência e nenhum argumento será adicionado à linha de comando.
Efeito colateral : você precisa adicionar manualmente um espaço no final da linha se quiser adicionar outro argumento a ls
.
Para evitar esse efeito colateral, você pode modificar a função _longopt
de uma maneira que impeça a correspondência do mesmo argumento duas vezes (pode não ser fácil).
Como aplicar isso a outros comandos e torná-lo permanente
Anexar um espaço à direita após uma correspondência é o comportamento padrão. Não sei se existe uma maneira diferente de usar -o nospace
ao especificar regras de conclusão com complete
.
Além disso, tenha em mente que as regras de conclusão são especificadas em algum lugar, mesmo para comandos incorporados (no meu laptop nesta pasta: /usr/share/bash-completion
).
Se você olhar o arquivo /usr/share/bash-completion/bash-completion
, verá onde as conclusões estão definidas para ls
:
complete -F _longopt a2ps awk base64 bash bc bison cat chroot colordiff cp \
csplit cut date df diff dir du enscript env expand fmt fold gperf \
grep grub head irb ld ldd less ln ls m4 md5sum mkdir mkfifo mknod \
mv netstat nl nm objcopy objdump od paste pr ptx readelf rm rmdir \
sed seq sha{,1,224,256,384,512}sum shar sort split strip sum tac tail tee \
texindex touch tr uname unexpand uniq units vdir wc who
Você vê que as mesmas regras se aplicam a um monte de comandos diferentes (como cp
, mv
, rm
...), portanto, se você modificar isso adicionando -o nospace
, a alteração será afeta ls
e todos os outros comandos.
Se não se sentir confortável com a modificação de configurações globais (você precisará de privilégios de root), você pode escrevê-las para ~/.bash_completion
(criar este arquivo, se não presente), como este
complete -F _longopt -o nospace a2ps awk base64 bash bc bison cat chroot colordiff cp \
csplit cut date df diff dir du enscript env expand fmt fold gperf \
grep grub head irb ld ldd less ln ls m4 md5sum mkdir mkfifo mknod \
mv netstat nl nm objcopy objdump od paste pr ptx readelf rm rmdir \
sed seq sha{,1,224,256,384,512}sum shar sort split strip sum tac tail tee \
texindex touch tr uname unexpand uniq units vdir wc who
Se você deseja modificar conclusões para outros comandos não listados aqui, procure por eles em /usr/share/bash-completion/bash-completion
file ou /usr/share/bash-completion/completions
folder.