Estou instalando o ripgrep no Ubuntu. Ele não existe no repositório oficial ou em PPAs privados, então estou seguindo as instruções do projeto para instalá-lo como um pacote fora da árvore: https://github.com/BurntSushi/ripgrep#installation .
Consegui aprender que esses pacotes devem viver em /usr/local
:
/usr/local/bin
para binários/usr/local/share/doc/<package_name>
para documentação/usr/local/share/man
para páginas de manual
E a conclusão do bash? Entendo que isso é um pouco menos padronizado que as outras categorias e pode ser específico de cada Bash
instalação. Qual é a maneira de fazer isso no Ubuntu?
Pelo que pude apurar depois de muita leitura, principalmente a documentação oficial ,
/usr/share/doc/bash-completion/README.Debian
, e as próprias fontes:/etc/bash_completion.d/
é o diretório legado , onde as conclusões são carregadas rapidamente , ou seja, todas originadas de uma vez quando o script principal é executado. Apenas alguns pacotes ainda instalam lá, a maioria já migrou para o novo padrão./usr/share/bash-completion/completions/
é o diretório para arquivos de conclusão que são carregados dinamicamente sob demanda porbash-completion
. Eles são fornecidos apenas quando necessários (e, mais importante, se necessário), economizando uma tonelada de recursos ao não carregar um zilhão de conclusões para comandos que você nunca usará.Sobre este seu comentário sobre
/etc
:Os arquivos em
/etc
não são exatamente "apt controlados", pelo menos não da mesma maneira/usr/bin
ou/usr/share
são. [1] Eles são arquivos de configuração e devem ser modificados pelo administrador local (você). Os pacotes os criam no momento da instalação, geralmente contendo os valores padrão, e então você deve modificá-los de acordo com suas necessidades.Alguns pacotes vão um passo além para facilitar a manutenção e, em vez de (ou juntamente com) arquivos de configuração, eles também criam um diretório de configuração (vazio) para "drop-in", arquivos extras de personalização. Portanto, em vez de modificar um arquivo de configuração para alterar algumas configurações, uma tarefa difícil e sujeita a erros usando ferramentas como
grep
,sed
eawk
, você apenas cria (ou exclui) arquivos de "trecho de configuração" que substituem as configurações desejadas.Dê uma olhada em todos os
/etc/{,*/}*.d/
diretórios do seu sistema. Seu pacote deseja instalar um repositório personalizado, como o Google Chrome? Não edite/etc/apt/sources.list
, solte um arquivo em/etc/apt/sources.list.d/
. Novos serviços?/etc/systemd/system/
. Configurações de sistema?/etc/sysctl.d/
(aliás, veja seu README).Muito, muito mais fácil e sem pisar no pé um do outro.
Alguns diretórios
/usr/share
também se comportam assim: seu.desktop
arquivo vai para/usr/share/applications/
, e novos mimetypes para/usr/share/mime/packages/
, e assim por diante. A diferença/etc
é que você, o administrador, não deve modificar nem excluir arquivos que você mesmo não criou/instalou.E esse é exatamente o caso com
/usr/share/bash-completion/completions/
.Dito isso, tenho boas e más notícias para você:
A má notícia é... se você está tentando instalar a conclusão em seu repositório github , isso não é uma conclusão bash, mas um
zsh
arquivo de conclusão! E não, bash e zsh são completamente incompatíveis em relação às conclusões.Não se preocupe, porque a boa notícia é:
ripgrep
está disponível nos repositórios apt desde o Ubuntu 18.10! Yay! :DE adivinha? Ele contém um arquivo de conclusão bash ! Instalado, é claro, em
/usr/share/bash-completion/completions/rg
.Hora de se alegrar, amigo!
[1] : Para ser honesto, você poderia dizer que eles são " monitorados ", não controlados. Leia Tudo o que você precisa saber sobre conffiles: arquivos de configuração gerenciados pelo dpkg para mais detalhes.
De acordo com o manual de perguntas frequentes , você deve apenas colocar o arquivo de conclusão
~/.local/share/bash-completion/completions/
geralmente no caso de suas próprias conclusões locais. Se esse diretório não existir, você pode criá-lo usando, émkdir -p
claro.O nome do arquivo é significativo.
Os scripts de conclusão da distribuição geralmente carregam as conclusões do usuário, se encontradas. Por exemplo, no Ubuntu,
/etc/bash_completion
sources/usr/share/bash-completion/bash_completion
.. e que origina scripts de~/.ssh/..
e~/.bash_completion
(que no meu caso sources~/local/etc/bash_completion.d/*
).Portanto, se você
~/.bash_completion
configurou assim (consulte https://stackoverflow.com/a/12426672/274318 para obter uma maneira de obter todos os arquivos em um diretório), basta instalar asripgrep
conclusões no diretório de conclusões local.Gostaria de acrescentar que, embora em grande parte não documentados, os scripts
/usr/local/share/bash-completion/completions
também são carregados. Veja esta pergunta . Eu também testei e verifiquei pessoalmente comRHEL8
eBash 4.4.20
.Portanto, se você estiver instalando software localmente em
/usr/local/bin
, provavelmente é onde deseja colocar seus scripts de conclusão (ao contrário de/usr/share/bash-completion/completions
, que é gerenciado por seu gerenciador de pacotes).Este diretório provavelmente não existe por padrão, então apenas crie-o:
Depois de colocar seus scripts nele e reiniciar seu shell, suas conclusões personalizadas devem funcionar sem a necessidade de configuração extra.