Você pode obter um "documento aqui"?

Você pode obter um "documento aqui"?

Digamos que eu tenha um script bash que atue como um arquivo de configuração para outro script bash:

configuração.sh:

verbose=yes
echo "Malicious code!"
name=test

script.sh:

source config.sh
echo "After sourcing: verbose='$verbose', name='$name'"

O problema é que isso não é muito seguro, pois qualquer coisa colocada em config.sh é executada:

$ ./script.sh
Malicious code!
After sourcing: verbose='yes', name='test'

Para torná-lo mais seguro, pensei em realizar operações de atribuição e apenas executá-las. Eu conseguiria passar sourceum "documento aqui":

script.sh:

source <<EOF
$(grep -P '^\s*\w+=' test.sh)
EOF
echo "After sourcing: verbose='$verbose', name='$name'"

(Sim, eu sei que o regex não é tão forte; é apenas um espaço reservado.) Infelizmente, a fonte não parece funcionar bem com os documentos aqui:

./script.sh: line 1: source: filename argument required
source: usage: source filename [arguments]
After sourcing: verbose='', name=''

Obviamente, eu poderia fazer várias coisas para obter dados de configuração de um arquivo, e isso provavelmente é mais seguro de qualquer maneira.

Mas ainda estou com essa coceira; Quero descobrir se o que tentei pode funcionar. Alguma sugestão?

Responder1

source <(cat << EOF
A=42
EOF
)
echo $A

Saída:

42

Responder2

sourceprecisa de um nome de arquivo, você não pode redirecionar a entrada para ele.

No meu sistema, consegui usar a substituição de processo:

source <( grep = test.sh )

Substitua =pela expressão regular apropriada.

Responder3

Você pode diretamente eval:

eval "$(grep -P '^\s*\w+=' config.sh)" 
#quotes needed if you want the full content of the file (including newlines etc.)

A fonte é essencialmente a mesma que:

eval "$(cat file)"   

Observe, entretanto, que as pessoas poderiam estar executando todos os tipos de codez no lado direito do sinal de igual:

a=$(evil_code_here)
b=`evil_code_here`
c="something" evil_code_here
#etc.

Você precisa de um filtro melhor.

informação relacionada