AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 416185
Accepted
Spidey
Spidey
Asked: 2018-01-11 10:45:49 +0800 CST2018-01-11 10:45:49 +0800 CST 2018-01-11 10:45:49 +0800 CST

Onde instalar scripts de conclusão bash para pacotes fora da árvore?

  • 772

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/binpara binários
  • /usr/local/share/doc/<package_name>para documentação
  • /usr/local/share/manpara 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 Bashinstalação. Qual é a maneira de fazer isso no Ubuntu?

bash ubuntu
  • 4 4 respostas
  • 2732 Views

4 respostas

  • Voted
  1. Best Answer
    MestreLion
    2020-08-19T00:41:09+08:002020-08-19T00:41:09+08:00

    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 por bash-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:

    seria misturado com pacotes controlados pelo apt ... Eu esperava um caminho separado

    Os arquivos em /etcnão são exatamente "apt controlados", pelo menos não da mesma maneira /usr/binou /usr/sharesã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, sede awk, 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/sharetambém se comportam assim: seu .desktoparquivo 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 zsharquivo 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 é: ripgrepestá disponível nos repositórios apt desde o Ubuntu 18.10! Yay! :D

    sudo apt install ripgrep
    

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

    • 8
  2. rosshjb
    2021-04-11T04:26:12+08:002021-04-11T04:26:12+08:00

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

    Coloque-os no completionssubdiretório de $BASH_COMPLETION_USER_DIR(o padrão é $XDG_DATA_HOME/bash-completionou ~/.local/share/bash-completionse $XDG_DATA_HOMEnão estiver definido) para que sejam carregados automaticamente sob demanda quando o respectivo comando estiver sendo concluído.

    O nome do arquivo é significativo.

    O nome do arquivo de conclusão para o comandofoo neste diretório deve ser foo, oufoo.bash . (O prefixo de sublinhado _foo também funciona, mas é reservado para uso interno de conclusão bash como um marcador de substituição/reprovação.)

    • 3
  3. Jean Jordaan
    2019-01-09T21:00:20+08:002019-01-09T21:00:20+08:00

    Os scripts de conclusão da distribuição geralmente carregam as conclusões do usuário, se encontradas. Por exemplo, no Ubuntu, /etc/bash_completionsources /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_completionconfigurou assim (consulte https://stackoverflow.com/a/12426672/274318 para obter uma maneira de obter todos os arquivos em um diretório), basta instalar as ripgrepconclusões no diretório de conclusões local.

    • 1
  4. cyqsimon
    2022-04-04T23:33:30+08:002022-04-04T23:33:30+08:00

    Gostaria de acrescentar que, embora em grande parte não documentados, os scripts /usr/local/share/bash-completion/completionstambém são carregados. Veja esta pergunta . Eu também testei e verifiquei pessoalmente com RHEL8e Bash 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:

    mkdir -p /usr/local/share/bash-completion/completions
    

    Depois de colocar seus scripts nele e reiniciar seu shell, suas conclusões personalizadas devem funcionar sem a necessidade de configuração extra.

    • 1

relate perguntas

  • exportar variáveis ​​​​env programaticamente, via stdout do comando [duplicado]

  • Problema estranho ao passar variáveis ​​do arquivo de texto

  • Enquanto a linha lê mantendo os espaços de escape?

  • ordem de substituição de processos `te` e `bash`

  • Execute um script muito lento até que seja bem-sucedido

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    ssh Não é possível negociar: "nenhuma cifra correspondente encontrada", está rejeitando o cbc

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    Como descarregar o módulo do kernel 'nvidia-drm'?

    • 13 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Wong Jia Hau ssh-add retorna com: "Erro ao conectar ao agente: nenhum arquivo ou diretório" 2018-08-24 23:28:13 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Bagas Sanjaya Por que o Linux usa LF como caractere de nova linha? 2017-12-20 05:48:21 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve