2016-04-06 14 views
1

Ich habe ein Problem beim Versuch, die Ausgabe eines sed-Befehls in einer Makefile-Variable zu erfassen.

JS_SRC:=$(shell sed -n '[email protected]*src="\([^"]*\.js\).*@\[email protected]' index.html)

Was mich

sed: -e expression #1, char 34: unknown option to s' `

Ich habe versucht, zu entkommen Dinge und dergleichen gibt, bin aber immer, dass Fehler gegeben. Alle Varianten von Flucht habe ich ausgeführt, läuft gut aus dem Terminal. Wie ruft ein Makefile den Shell-Befehl auf ?. /usr/bin/sh -c "cmd?" oder etwas anderes ?.

Etwas interpoliert, aber ich habe keine Ahnung was.

Antwort

1

JS_SRC:=$(shell sed -n "s/.*src=\"\\([^\"]*\\.js\\).*/\\1/p" index.html)

scheint zu funktionieren. Ich habe das herausgefunden, indem ich make -d ausgeführt habe und den Prozess gesehen habe, den es erstellt hat.

Was war verwirrend ist, dass es verschiedene Dinge mit ' vs " in der sed-Argument. " läuft mit /bin/sh -c "args", also war ich in der Lage, die Flucht zu optimieren, um zu bekommen, was ich brauchte, um dort zu erscheinen. Die Verwendung von ' scheint sed direkt aufzurufen.

Es gibt einen ganzen Haufen von Flucht, die ich mir vorstellen, ist unnötig (ich brauche Variablen im Sed-Ausdruck nicht interpolieren, aber es sendet es an eine Shell, die ich verstehe. So wird es tun müssen! :)