usando o script bash para gerar um novo script: é necessário misturar variáveis para serem substituídas e não substituídas

5

Estou tendo um problema com a substituição de variáveis bash. Aqui está um exemplo bobo do que estou tentando fazer. Eu preciso produzir um novo script a partir de um script bash. Uma linha (veja echo no meu exemplo) tem uma mistura de variáveis que não devem ser substituídas e variáveis que devem ser substituídas.

#!/bin/bash
REPLACE='whoami'
cat << EOF > mynewscript.sh
    read DONTREPLACE < /home/$REPLACE/localinput.txt
    echo $DONTREPLACE > /home/$REPLACE/somefile.log
EOF
exit 0

Este não é um exemplo real, mas ilustra o problema. Digamos que eu precise saber o caminho absoluto com antecedência e que eu queira $ REPLACE avaliado no meu script original. Mas eu não quero $ DONTREPLACE avaliado / substituído no meu script. $DONTREPLACE deve ser enviado exatamente assim para o novo script.

Portanto, citar 'EOF' ao criar o documento aqui não funciona.

Espero que eu esteja explicando isso bem o suficiente.

Eu não sei de outra solução. Eu aprecio todas as ideias, mas prefiro idéias / soluções realmente simples. Não precisa ser elegante.

    
por MountainX 22.06.2013 / 00:42

2 respostas

6

Você deve usar \ para escapar do $ na frente de DONOTREPLACE . Veja o exemplo e a saída abaixo

REPLACE=10
DONOTREPLACE=20
cat <<EOF
> echo $REPLACE
> echo \$DONOTREPLACE
> EOF

echo 10
echo $DONOTREPLACE
    
por 22.06.2013 / 00:48
-1

Eu acho que uma solução melhor, se você estiver usando bash é escapar do marcador "EOF". Assim:

cat > mytest << \EOF
$HOME
EOF

cat mytest
$HOME
    
por 22.08.2014 / 14:38