Ersetzung in "here document" verhindern

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
smutbert
Moderator
Beiträge: 8331
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Ersetzung in "here document" verhindern

Beitrag von smutbert » 23.01.2015 09:18:37

Hallo,

in einem kleinen Skript will ich einen Befehl in ein weiteres Skript schreiben, also etwa so
cat <<EOF > ${TARGET}/install.sh
#!/bin/sh
apt-get install $(cat packages.txt)
EOF
Mein Problem ist, dass das $(cat packages.txt) bereits vor dem Schreiben in das weitere Skript durch die Ausgabe des Befehls ersetzt wird. Wie ließe sich das verhindern?

Danke und lg,
smutbert

Benutzeravatar
Meillo
Moderator
Beiträge: 8818
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Ersetzung in "here document" verhindern

Beitrag von Meillo » 23.01.2015 09:40:40

Das Dollarzeichen escapen! (Mit einem Backslash, wie ueblich.)

Oder das ``EOF'' quoten:

Code: Alles auswählen

cat <<'EOF' > ${TARGET}/install.sh
#!/bin/sh
apt-get install $(cat packages.txt)
EOF
... dann wird das Here document wie Singlequotes (statt wie Doublequotes) behandelt.
Use ed once in a while!

Benutzeravatar
smutbert
Moderator
Beiträge: 8331
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: Ersetzung in "here document" verhindern

Beitrag von smutbert » 23.01.2015 09:56:51

:facepalm:
Zuletzt geändert von smutbert am 23.01.2015 10:34:43, insgesamt 1-mal geändert.

Benutzeravatar
Meillo
Moderator
Beiträge: 8818
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Ersetzung in "here document" verhindern

Beitrag von Meillo » 23.01.2015 10:27:35

Ich hab natuerlich gerne geholfen.

... aber spare dir lieber das Verbeugen (das kann ich naemlich nicht leiden) und schaue stattdessen in die Manpage der bash. Wenn du nach ``here document'' suchst, dann findest du dort:
The format of here-documents is:

Code: Alles auswählen

<<[-]word
	here-document
delimiter
No parameter expansion, command substitution, arithmetic
expansion, or pathname expansion is performed on word. If
any characters in word are quoted, the delimiter is the
result of quote removal on word, and the lines in the here-
document are not expanded. If word is unquoted, all lines
of the here-document are subjected to parameter expansion,
command substitution, and arithmetic expansion. In the lat-
ter case, the character sequence \<newline> is ignored, and
\ must be used to quote the characters \, $, and `.
(Oder, falls du's gerne noch definitiver haettest, dann kannst du auch einen Blick in POSIX werfen: http://pubs.opengroup.org/onlinepubs/96 ... g_18_07_04 )
Use ed once in a while!

Benutzeravatar
smutbert
Moderator
Beiträge: 8331
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: Ersetzung in "here document" verhindern

Beitrag von smutbert » 23.01.2015 10:38:45

Ok, Verbeugung durch Facepalm ersetzt und den Link habe ich meinen Bookmarks hinzugefügt. Danke.

Benutzeravatar
Meillo
Moderator
Beiträge: 8818
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Ersetzung in "here document" verhindern

Beitrag von Meillo » 23.01.2015 11:33:38

Ich wollte nicht veraergert klingen. Ich freue mich sehr helfen gekonnt zu haben. Dieses Verbeugen ist nur so eine Demutshaltung, die mir zuwieder ist. Wir haben alle unsere Fragen und blinden Flecke, und jeder kann irgendwann mal jemandem helfen. Dafuer gibt's ja so Foren wie dieses. Da sollte sich keiner verbeugen muessen. ... lasst uns lieber jubeln und tanzen! Bild Bild Bild

:THX:
Use ed once in a while!

Benutzeravatar
smutbert
Moderator
Beiträge: 8331
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: Ersetzung in "here document" verhindern

Beitrag von smutbert » 23.01.2015 12:46:06

Sei unbesorgt, du hast nicht verärgert (zumindest nicht ernsthaft verärgert) geklungen.
Bild

Antworten