Como implantar / instalar scripts corretamente?

1

Desenvolvi vários scripts utilitários que resolvem problemas específicos do trabalho diário da minha equipe.

Até agora, o que fiz para implantar o script nos laptops de meus colegas de trabalho é o seguinte:

  • Cada solução tem um script main.sh (assim como outros scripts e arquivos de suporte)
  • Crie uma pasta na pasta base do usuário e coloque os arquivos lá
  • Adicione um alias a .bashrc ou .bash_aliases , dependendo da distribuição do Linux, apontando para o main.sh script
  • Copie o arquivo de preenchimento automático para /etc/bash_completion.d/ (o nome do arquivo de conclusão é o mesmo que o alias e a extensão .auto ).
  • Copie a página man para /usr/share/man/man1/ e depois gzip (o nome do arquivo man é o mesmo que o alias mais a extensão .1 ).

Eu gostaria de criar um instalador, mas a parte do alias é complicada.

  • Existe uma opção melhor que também permitiria a automação (instalador)?
  • Talvez colocando um link para o arquivo main.sh em /usr/local/bin em vez de criar aliases?
  • Existe uma prática recomendada para isso?
por Tulains Córdova 10.02.2015 / 18:28

1 resposta

2

Bem, não é muito difícil trabalhar em um recurso init em uma função do shell. Por exemplo:

fn(){ 
    echo first time called\!
    fn(){ 
        echo not the first time called\!
    }
}
fn; fn; fn

... vai imprimir ...

first time called!
not the first time called!
not the first time called!

Você também pode definir aliases de shell em uma função, ou arquivos fonte, ou qualquer outra coisa - você pode fazer bastante qualquer coisa com o estado atual do shell que você também pode fazer no prompt < em> except afectam os seus parâmetros posicionais (embora até isso possa ser contornado com alias es) .

Portanto, poderia ser uma boa idéia para criar suas instalações como .fn.name (ou qualquer outro) arquivos e chamá-los uma vez no arquivo rc - onde o chamada inicial para a função manipula toda a sua própria configuração conforme necessário e, em seguida, redefine-se para todas as chamadas posteriores.

Ou, similar a algumas shells que farão com autoload , você pode criar uma função de uma linha que é definida toda vez que o arquivo rc é lido como:

printf '%b' '[ -f ~/.fn_name ] &&\n\tfn_name(){ . ~/.fn_name; }\n' >>~/.bash.rc

... e dentro de ~/.fn_name ...

fn_name(){ : now redefine the function; }

... dessa forma, o fn_name não usará quase nenhum estado de shell até que seja chamado pela primeira vez, não sobrecarregará o .bash.rc de maneira terrível e poderá ser facilmente gerenciado.

Poderia ser mais fácil, no entanto, colocar todos esses tipos em um único arquivo ~/.fn e, obtê-lo a partir do arquivo rc principal, e depois fazer a fonte de cada indivíduo a partir dele.

    
por 10.02.2015 / 18:39