Práticas recomendadas para scripts BASH de vários arquivos?

0

O que estou fazendo é isto:

Eu gostaria de dividir meu script em vários blocos. Qual seria a melhor prática para definir todas as minhas variáveis em um só lugar? Devo definir todos eles no script de init e exportar ou existe uma maneira melhor de ter cada parte do meu script para um arquivo de variáveis estáticas? Talvez em JSON ou algo parecido? Aqui está um exemplo

project / main.sh

#!/bin/bash

new_user="poopmacscoop"
a_list_of_packages="pyhon3 nmap apache2.... others"
some_other_info_for_another_script="important info"

menu () {
    read # blah blah whatcha wanna run?
    # other bits
}   
opts () {
    case ... # a bunch of options
    1) ./src/another_script.sh # one of a bunch of scripts in a separate folder
}
while true
do
   menu
   opts
done

Agora, o script ./src/another_script.sh, qual é a melhor maneira de lidar com os vars para facilitar e saltar-around-capacidade? (esse é um termo técnico)

    
por archae0pteryx 08.09.2016 / 00:48

2 respostas

4

Crie um arquivo independente com apenas as declarações de variáveis:

new_user="poopmacscoop"
a_list_of_packages="pyhon3 nmap apache2.... others"
some_other_info_for_another_script="important info"

Em seguida, inclua este arquivo no início em todos os seus arquivos de script com source /my/variables

    
por 08.09.2016 / 00:51
1

Eu tenho mais uma resposta original com algumas melhorias potencialmente úteis. Algumas das informações dependem do usuário pretendido de seus scripts, algumas são de conhecimento geral sobre variáveis bash e outras são de minha própria experiência.

O diretório que você armazena seus scripts (~ / bin) e / ou o diretório que você possui em suas declarações de variáveis (~ / lib) podem ser rapidamente referenciados com um pequeno mod para sua variável de ambiente PATH.

Variáveis são específicas para o ambiente de onde são chamadas. Ou seja, se você exportá-los, eles se tornarão disponíveis globalmente para seu uso, mas, nesse contexto, apenas para o seu ambiente de login. Se você alterá-los dentro de um script, eles só terão esse valor enquanto o script estiver sendo executado.

No meu .bashrc eu defino e exporto VAR="variável de login". Isso é feito toda vez que eu faço login no meu host solaris.

Agora, neste script de exemplo que eu chamo de proof.bash, modificarei VAR no contexto global do script e, em seguida, novamente em uma função dentro do script. Isso não altera o valor da variável depois que o script é executado.

#!/bin/bash
# VAR is usable because it was declared/exported outside this script.
echo $VAR
#Define bash global variable
#This variable is global and can be used anywhere in this bash script
VAR="global variable"
function see_it_to_believe {
#Define bash local variable
#This variable is local to bash function only
local VAR="local variable"
echo $VAR
}
echo $VAR
see_it_to_believe
# Note the bash global variable did not change
# "local" is bash reserved word
echo $VAR

Após o script ser executado, posso echo $VAR e obter "variável de login" ainda.

    
por 08.09.2016 / 01:28