2014-02-24 3 views
6

auf Ubuntu, würde ich gerne mit einer Plattendatei, um am Ende der lautet:ein Dollarzeichen in Unix Escaping innerhalb der Katze Befehls

foo $(bar) 

Ich mag diese Datei erstellen, mit dem cat Befehl, z.B.

cat <<EOF > baz.txt 
type_magic_incantation_here_that_will_produce_foo_$(bar) 
EOF 

Das Problem ist das Dollarzeichen. Ich habe mehrere Kombinationen von Backslash-, Single-Quote- und Double-Quote-Zeichen ausprobiert und kann sie nicht zum Laufen bringen.

+0

Mögliche Duplikat von [Wie Katze <> eine Datei mit Code? in der Schale] (https://stackoverflow.com/questions/22697688/how-to-cat-eof-a-file-containing-code-in-shell) – tripleee

Antwort

12

können Sie regelmäßig verwenden, zitieren Operatoren in einem hier Dokument:

$ cat <<HERE 
> foo \$(bar) 
> HERE 
foo $(bar) 

oder Sie können Erweiterung deaktivieren, indem Sie die hier-doc Begrenzer zitiert:

$ cat <<'HERE' # note single quotes 
> foo $(bar) 
> HERE 
foo $(bar) 
+0

Dies ist auch hilfreich. Ich wusste nicht, dass diese "hier Dokumente" heißen. –

+0

Das ist die bessere Antwort. Ich fand schließlich heraus, dass mein Problem auftrat, weil ich * verschachtelte * Fluchten hatte, die verhindert werden mussten. Dies ist die sauberere Lösung. –

1

Backslash ('\') funktioniert für mich. Ich habe es versucht und hier ist die Ausgabe:

$ cat <<EOF > tmp.txt 
foo \$(abc) 
EOF 

$ cat tmp.txt 
foo $(abc) 

Ich versuchte es auf bash. Ich bin mir nicht sicher, ob Sie ein anderes Escape-Zeichen in einer anderen Shell verwenden müssen.

+0

Danke. Ich weiß nicht, was ich falsch gemacht habe! –