Armazenando scripts shell [duplicados]

10

Qual é a boa prática comum para armazenar scripts de shell? (bash, sh, ...)

Por enquanto, tenho alguns scripts bash e sh no meu diretório $HOME

e eu invoco-os com

$ bash $HOME/script1.bash arg1, arg2, ...

ou

$ sh $HOME/script2.sh arg1, arg2, ...

Posso armazená-los em algum local padrão e invocá-los como normal aplicativos como ls , pwd , ...? por exemplo,

$ script1 arg1, arg2, ...
$ script2 arg1, arg2, ...

O que é prática comum aqui para usuários avançados do Linux?

    
por xralf 06.05.2015 / 15:03

5 respostas

14

Você pode armazenar seus scripts onde eles pertencem ao sistema de arquivos e criar um diretório bin em sua casa. Adicionando

if [ -d "$HOME/bin" ] ; then
    export PATH="$HOME/bin:$PATH"
fi

no seu .bashrc torna qualquer executável colocado em ~/bin detectável. Finalmente, você só precisa adicionar arquivos no doretor. Você pode usar links simbólicos para qualquer script que você queira tornar disponível em ~/bin , o que permite alterar virtualmente o nome do script e deixá-lo onde quiser no sistema de arquivos. Como exemplo, para um arquivo my_script.sh , primeiro verifique se o arquivo é executável

chmod u+x my_script.sh

crie um link simbólico

ln -s my_script.sh ~/bin/my_script

na pasta dedicada. Observe que a extensão foi removida por conveniência. Agora você pode executar seu script de qualquer lugar usando o comando my_script . Você não precisa fazer o link simbólico toda vez que editar o arquivo my_script.sh original.

Editar: para tornar qualquer arquivo de texto executável através de um determinado intérprete, você pode usar um shebang . Para um script bash, isso significa adicionar

#!/bin/bash

como primeira linha do arquivo. Observe que a técnica não está restrita a scripts bash, mas também se aplica ao python, por exemplo, usando

#!/usr/bin/env python

Observação: eu uso pessoalmente ~/.local/bin se ~/bin como uma preferência pessoal, mas a maioria das pessoas usa um diretório bin localizado diretamente em sua casa, não oculto. Muitas distribuições o integram diretamente, como debian ou ubuntu, que adicionam automaticamente tal diretório no PATH se ele existir (no arquivo .profile padrão que eles enviam). A minha escolha é baseada no fato de que muitos softwares já usam .local/share , que eu considero como uma ferramenta de configuração e não como um conjunto de arquivos reais (apenas links simbólicos), e que eu não quero que essa pasta mexa com a conclusão.

    
por 06.05.2015 / 15:09
9

O caminho comum para esses scripts é $HOME/bin . Se esse caminho não estiver no $PATH , você deve adicionar

PATH=$HOME/bin:$PATH

para o seu arquivo .profile , .bash_profile ou .bashrc .

    
por 06.05.2015 / 15:11
4

Existem várias etapas para gerenciar seus scripts de shell como programas reais.

  1. Ative o modo executável do seu script:

    chmod +x myscript.sh
    
  2. Inicie seu script com uma string de intérprete (sinalizada por #! , o "hash-bang") que informa ao sistema como executar seu script (o padrão é um shell script, mas não confie nele).

     #!/bin/bash
    
  3. Colete seus scripts (junto com programas compilados, não faz diferença) em um diretório, e coloque este diretório em sua execução PATH . O local habitual dos seus próprios scripts é $HOME/bin , mas depende muito de você.

    Coloque isso no seu ~/.profile e os futuros shells encontrarão seus scripts exatamente da mesma forma que eles encontram ls ou make . (A menos que estes últimos sejam aliases, é claro: -))

    export PATH="$HOME/bin:$PATH"
    
  4. O Unix, ao contrário do Windows, não irá ignorar a extensão dos arquivos executáveis. Se o seu script é chamado de myscript.sh , você precisa digitar myscript.sh para executá-lo. Então, renomeie para myscript - a primeira linha da fonte lhe diz que tipo de script ela é.

    mv myscript.sh myscript
    

myscript agora é um comando completamente comum, que você pode executar como todo o resto. Se ele tiver o mesmo nome de um executável já no seu PATH , ele terá precedência, pois colocaremos $HOME/bin primeiro. (Você pode colocá-lo no final, se preferir).

    
por 06.05.2015 / 16:59
1

Você pode armazenar seus scripts em um diretório dedicado e adicioná-lo à sua variável PATH . PATH é a maneira como seu sistema sabe onde procurar executáveis.

    
por 06.05.2015 / 15:06
0

Sim, é possível configurá-lo para que você possa invocar seus scripts pelo nome, independentemente do seu diretório de trabalho.

Etapas

  1. Verifique se os arquivos no diretório são executáveis com chmod
  2. Se for um script em vez de um executável binário, verifique se o script começa com um shebang apropriado .
  3. Verifique se o diretório que contém o arquivo está em PATH .
    • Mas certifique-se de que é um diretório apropriado primeiro (consulte a próxima seção)
  4. Se você quiser que o script seja acessível por meio de um simples nome de comando, remova a extensão do arquivo ou crie um link simbólico com o nome desejado no diretório.
    • Isso é completamente opcional
    • Para criar um link simbólico: ln -s origfile linkname

Onde colocar os scripts

Agora, em qual diretório você deve colocar os executáveis? Em última análise, isso se resume a quão visível você deseja que seus scripts estejam no sistema:

  • Se você é um administrador do sistema e deseja que todos no sistema consiga executar os scripts, coloque-os em /usr/local/bin .
    • Este diretório já está em PATH por padrão em muitos sistemas
  • Se você quiser que eles estejam acessíveis apenas para você, coloque-os em ~/bin .

Esse outro post tem algumas informações úteis sobre o tópico de onde os scripts e binários executáveis devem ser colocados: Como eu sei onde colocar coisas no linux? .

    
por 06.05.2015 / 23:11