Aprenda a diferença entre o fornecimento e a bola no Bash

- 3325
- 746
- Randal Kuhlman
O foco principal deste artigo é entender claramente o que acontece quando você executa o Script vs fonte o script em Bash. Primeiro, entenderemos claramente como o programa é enviado quando você chama o script de maneiras diferentes.
OBSERVAÇÃO: Criar o script com uma extensão não importa. O script funcionará bem mesmo sem extensões.
Basicamente, todo script começa com uma linha chamada A Shebang (#!). O Cerquilha Símbolo em Bash será interpretado como comentários, mas Shebang tem um significado especial. Diz a Bash para enviar o programa em qualquer intérprete que você mencionou Shebang.
Abaixo estão um programa de amostra e estou especificando o Bash como meu intérprete.
$ cat >> hello_world.sh #!/usr/bin/Env Bash Echo "Hello World" $ chmod +x hello_world.sh
Agora, para executar o script, você pode fazer isso de duas maneiras.
- Use um caminho relativo para chamar o script. Mova para o diretório onde o script está presente e corra ./Olá Mundo.sh.
- Use o caminho absoluto para chamar o script. De qualquer lugar do sistema de arquivos, digite o caminho completo para o script.
$ ./Olá Mundo.sh $ pwd $/home/karthick/hello_world

Agora vamos ver o que acontece quando você tenta enviar seu programa sem Shebang. Na ausência de Shebang, O programa será enviado a qualquer shell atual com o qual você esteja executando, no meu caso, é Bash (/BIN/BASH).
Deixe -me demonstrar um exemplo. Estou criando um script python sem Shebang E quando eu chamo o programa, Bash Não sabe que ele deve enviar este programa para o intérprete Python, em vez disso, ele executará o programa no shell atual.
$ cat> run-py.py eco $ shell print ("hello world") $ chmod +x run-py.py $ ./run-py.py

Nesse caso, você pode ligar para o programa mencionando em qual intérprete ele deve ser enviado ou apenas adicionar o Shebang linha que é sempre recomendada.
# qual python3 $ (que python3)/home/karthick/run_py.py

Agora que você sabe como chamar o script, o próximo passo seria entender o que acontece quando chamamos o script. Quando você invoca o script, como mostrado nos exemplos acima, ele criará um processo infantil (bifurcação) e o script será enviado ao processo infantil. Eu executei um script de amostra que apenas executará o seguinte comando e mostra que o script é enviado a um processo infantil.
$ ps -ef -Forest | Grep -i Bash

Pode haver vários processos infantis como parte do script e isso depende do nosso código. Deve -se notar que as variáveis ambientais criadas pelo subscrito serão descartadas assim que terminar. Um processo infantil pode acessar variáveis criadas pelo processo pai, exportando -as. Mas o processo pai não pode acessar as variáveis criadas pelo processo infantil.
Dê uma olhada nos artigos abaixo para entender mais sobre como as variáveis funcionam e como exportar as variáveis.
- Entendendo e escrevendo 'variáveis Linux' em scripts de shell
- Aprenda a diferença entre $$ e $ Bashpid em Bash
Fornecendo o script
““Fonte”É um comando interno do shell que lê o arquivo passado como um argumento e executa o código no ambiente de shell atual. Um caso de uso apropriado que você usa principalmente é modificar sua configuração em .Bashrc
ou .Bash_profile
e recarregar as mudanças usando o Comando de origem.
$ type -uma fonte

Existem duas maneiras sintáticas de executar o Comando de origem. Você pode escolher qualquer pessoa entre duas sintaxes e é de escolha pessoal.
$ fonte file_name [argumentos] $ . File_name [argumentos]
Deixe -me demonstrar como a fonte realmente funciona. Vou criar dois scripts de shell. O primeiro script (Módulo.sh) vai manter algumas variáveis e funções. O segundo script (Principal.sh) vai imprimir a variável e chamar a função.
Arquivo Módulo.sh.
#!/usr/bin/Env Bash var1 = $ (echo "welcome to $ 1") função f1 () echo “função f1 é chamada”
Arquivo Principal.sh.
#!/usr/bin/Env Bash eco $ var1 f1

Defina a permissão de execução para o script e ligue para o script principal "principal.sh ”. Agora, este script tentará encontrar a função F1
e variável VAR1
no ambiente atual do shell e falhará com o comando não encontrado.
$ Bash Main.sh

Agora vamos executar o comando de origem dentro do script que carregará a variável e funciona no ambiente atual do shell e que serão acessíveis por "principal.sh ”.
Arquivo Módulo.sh.
#!/usr/bin/Env bash var1 = $ (echo "welcome to $ 1") função f1 () eco "a função f1 é chamada"
Arquivo Principal.sh.
#!/usr/bin/Env Bash Fonte Módulo.sh tecmint echo $ var1 f1

Agora execute o script novamente e veja.
$ Bash Main.sh

O fonte é muito útil em Bash Para seguir a abordagem de programação modular na criação de nossos scripts de shell. Podemos dividir nosso código em módulos menores e pode ser usado em muitos programas. Dessas maneiras, podemos seguir o SECO (Não se repita) Princípio.
É isso para este artigo. Discutimos brevemente a diferença entre o fornecimento e a bobina em Bash. Passe pelo artigo e compartilhe seu feedback valioso conosco.
- « Ebook Apresentando o Guia de Configuração da Virtualização do KVM para Linux
- Como dividir a tela Vim horizontal e verticalmente em Linux »