2012-03-26 12 views
14

Necesito dar salida a algunos textos como script bash, pero en un script. Uso el gato para esto, pero tiene un inconveniente. Es interpreta variables y cosas durante su escritura. Quiero prevenir esto.Evitar que bash interprete sin citar todo

¿Cómo hacer eso sin citar todos los varibles (mi script es muy largo)? Ejemplo

cat >/tmp/script << EOF 
    $HOSTNAME 
    # lots of other stuff I do NOT want to escape like \$VARIABLE 
    # ... 
EOF 

cat /tmp/script 
myhostname.mylan 

Quiero:

cat /tmp/script 
$HOSTNAME 

Editar: Tenga en cuenta mi guión (en este caso sólo se $ HOSTNAME) es muy larga, no quiero cambiarlo todo. También citar solo no funciona con < <

cat >/tmp/script '<< EOF 
    $HOSTNAME 
EOF' 
File not found: EOF' 

Cuál es el truco? Gracias.

+0

¿Alguien podría decir por qué no se interpreta en mi caso? '$ echo $ HOSTNAME' ->' myhost'; '$ echo \ $ HOSTNAME' ->' $ HOSTNAME'; '$ echo \ $ HOSTNAME>/tmp/s; cat/tmp/s' -> '$ HOSTNAME' –

Respuesta

48

Si desea todo lo citado:

cat << 'EOF' 
stuff here with $signs is OK 
as are `backquotes` 
EOF 

Consulte la sección "documentos" aquí en el manual.

+0

ESTO ES LO QUE QUIERO, GRACIAS! :-) – lzap

+0

'cat << EOF' no escapa' $ 'cosas y' cat << 'EOF'' lo hace, ¡buena captura aquí! –

+0

¡INCREÍBLE! Ojalá hubiera podido otorgarle un ascenso de votos :-) –

1

Escapar de la $:

cat >/tmp/script << EOF 
    \$HOSTNAME 
EOF 
+0

No, como se describe - Tengo miles de líneas de eso - No voy a hacer eso. Esto funcionaría en mi ejemplo simple, sí, pero estoy tratando de encontrar una solución diferente. Por eso el sujeto. – lzap

+1

@lzap, 'sed 's/\ $/\\ $/g''? –

0

Pruebe con eco:

echo ' 
$HOSTNAME 
... 
' >> /tmp/script 
1

usar sed:

sed -n '20,30p' "$0" 

para imprimir la línea 20 a 30, SSCE:

#!/bin/bash 
cat >/dev/null << EOF 
3 
4 $HOSTNAME 
5 ls 
6 $(ls -l) 
7 
8 echo 'foo 
9 bar' 
10 
11 echo "Foo 
12 $((4+4)) Bar" 
EOF 
sed -n '3,12p' "$0" 
echo "fine?" 

trabajando con cabeza/cola debería funcionar también.

Tendrá que ajustar los números, si trabaja en él e inserta o borra líneas.

+0

¡Voto ascendente, hay una solución ahora, pero buen esfuerzo! ¡Gracias! – lzap

Cuestiones relacionadas