Executando scripts de shell bash

1

Estou lendo um artigo sobre a execução de scripts de shell bash.

Método 1: Crie um diretório para seus scripts de shell e adicione o diretório ao conteúdo da variável PATH, para que você possa executar o script como mostrado abaixo. Quando isso é executado, as variáveis, funções e aliases criados nesta sub-camada são conhecidos apenas para a sessão bash específica dessa sub-rede. Quando esse shell sai e o pai recupera o controle, tudo é limpo e todas as alterações no estado do shell feitas pelo script são esquecidas.

$ hello_world.sh

Método 2: Um script também pode ser explicitamente executado por um determinado shell. O shell especificado será iniciado como um subshell do seu shell atual e executará o script.

$ sh script_name.sh

Método 3: Se você não quiser iniciar um novo shell, mas executar o script no shell atual, você o usa:

source script_name.sh

Eu realmente não entendo os benefícios e desvantagens de cada um desses métodos. Alguém pode esclarecer?

    
por JohnMerlino 14.03.2014 / 00:34

3 respostas

0

sh

Isso executa o programa chamado hello_world.sh no caminho de pesquisa do programa (PATH) . Se esse programa começar com uma linha shebang , essa linha indica que o programa deve ser passado para um intérprete para ser executado; caso contrário, o programa deve ser carregado como código nativo. A linha shebang é lida pelo kernel. Por exemplo, se a primeira linha de hello_world.sh for #!/bin/sh , o kernel lançará /bin/sh e passará hello_world.sh como argumento.

Se hello_world.sh não começar com um shebang nem um código nativo válido, o kernel retornará um erro quando você tentar executá-lo. Se você estiver fazendo isso a partir de um shell, o shell notará o erro e tentará executar hello_world.sh como um script de shell (como o segundo formulário abaixo).

sh script_name.sh

Isso executa o programa chamado sh encontrado no PATH, com script_name.sh passado como argumento. O programa sh , assumindo que é o shell usual, abrirá o arquivo chamado script_name.sh no diretório atual e o interpretará. Se o script começar com uma linha shebang, será ignorado. O script não precisa ser executável.

. script_name.sh
source script_name.sh

Quando você executa isso em um shell, qualquer uma dessas instruções informa ao shell em execução para interpretar os comandos no arquivo especificado. O script não é executado como um programa separado, mas como parte do processo de shell existente. Assim, o script pode afetar o diretório atual, o ambiente,… do shell em execução. Os comandos incorporados . e source são sinônimos, exceto que . procura apenas script_name.sh no PATH, enquanto em alguns shells source também procura no diretório atual.

    
por 14.03.2014 / 01:54
0
'hello_world.sh'

Ele usa o interpretador do script ... Talvez seja, mas pode ser algum outro. Além disso, precisa de bit executável. E encontre o script de $ PATH se não tiver no diretório atual

'sh hello_world.sh'

Inicie um novo exemplo de programa com este shell

'source script_name.sh'

Não use cedo ... Talvez algo parecido com inclusão, se sim - você pode usar o estado atual do shell no script (ao contrário das 2 primeiras)

    
por 14.03.2014 / 01:11
0

Existem situações em que o seu objetivo é modificar o ambiente atual. Isto é, e. o caso ao ler variáveis ou definições de função / alias de um arquivo de configuração (como os arquivos de inicialização do shell como ~/.bashrc , ~/.aliases ).

Chamar um shell com o script como argumento em certas situações tem a vantagem de você não precisar tornar o arquivo executável e de modificar facilmente os parâmetros de execução:

bash -vx ./my/script.sh

Você também precisa disso ao verificar como diferentes shells executam um script:

bash -vx ./my/script.sh

vs.

sh -vx ./my/script.sh

vs.

zsh -vx ./my/script.sh
    
por 14.03.2014 / 01:13