Escrevendo um script bash em uma nova caixa, Escapando Código [duplicado]

0

Pode haver uma pergunta por aí em algum lugar. Mas eu não consegui encontrá-lo facilmente.

Basicamente eu quero escrever um script bash em uma nova caixa. Um script que eu usei anteriormente.

Exemplo:

#!/bin/bash -ex
hi='hello world!'
echo $hi

Eu sempre usei (para saída multilinha)

cat > script.sh <<EOF
#!/bin/bash -ex
hi='hello world!'
echo $hi
EOF

Mas, como você deve ter notado, isso tem problemas com $ hi e outros símbolos. Existe uma boa maneira de fazer isso? Dicas de truques?

    
por Dishcandanty 23.12.2015 / 20:42

2 respostas

1

Você deve citar o marcador End-Of-File, ou seja, a expansão da variável (ou melhor, tudo começando com $ , irá obter o contexto atual.

Compare:

hi=here
cat >file.sh <<EOF
#!/bin/sh
hi=there
echo $hi
EOF
sh file.sh

(saídas here )

hi=here
cat >file.sh <<\EOF
#!/bin/sh
hi=there
echo $hi
EOF
sh file.sh

saídas de there

hi=here
cat >file.sh <<'EOF'
#!/bin/sh
hi=there
echo $hi
EOF
sh file.sh

saídas de there .

Como alternativa, você pode citar o $ :

hi=here
cat >file.sh <<EOF
#!/bin/sh
hi=there
echo \$hi
EOF
sh file.sh

(saídas there )

Este comportamento inicialmente surpreendente é muito útil quando existe a necessidade de gerar scripts ligeiramente diferentes para várias finalidades.

    
por 23.12.2015 / 20:46
1

Acho que posso ter percebido. Ainda interessado em como os outros resolvem este problema:

cat > script.sh <<'EOF'
#!/bin/bash -ex
hi='hello world!'
echo $hi
EOF

Como nota, parece que o freebsd requer:

cat > script.sh <<'EOF'
#!/bin/bash -ex
hi='hello world!'
echo $hi
'EOF'
    
por 23.12.2015 / 20:45