Heim >Backend-Entwicklung >Golang >Warum schlägt mein Makefile-Befehl fehl, wenn Shell-Ausdrücke verwendet werden?

Warum schlägt mein Makefile-Befehl fehl, wenn Shell-Ausdrücke verwendet werden?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-26 01:46:09868Durchsuche

Why Does My Makefile Command Fail When Using Shell Expressions?

Makefile-Auswertung von Ausdrücken

Bei der Arbeit mit Makefiles ist es wichtig zu verstehen, wie Ausdrücke in Befehle interpoliert werden. Ein häufiger Fallstrick entsteht beim Versuch, Shell-Ausdrücke in Makefile-Befehle zu integrieren.

Ein solcher Fall ist die Arbeit mit Go-Tests. Um Abhängigkeiten in einem Go-Projekt eines Anbieters zu überspringen, könnte man den folgenden Befehl in der Befehlszeile verwenden:

$ go test $(go list ./... | grep -v /vendor/)

Dieser Befehl filtert erfolgreich Tests von Anbietern heraus. Wenn Sie jedoch versuchen, denselben Befehl wie folgt in ein Makefile aufzunehmen:

test:
    go test $(go list ./... | grep -v /vendor/)

.PHONY: test

Der Ausdruck wird nicht ausgewertet. Stattdessen wird der Befehl wörtlich behandelt, was zu einem Fehler führt.

Um dieses Problem zu beheben, maskieren Sie das Dollarzeichen ($) doppelt, wie unten gezeigt:

test:
    go test $$(go list ./... | grep -v /vendor/)

.PHONY: test

By double Durch das Escapezeichen des Dollarzeichens versteht das Makefile, dass der Ausdruck von einer Shell ausgewertet werden soll, was die erfolgreiche Interpolation und Ausführung des Befehls ermöglicht.

Das obige ist der detaillierte Inhalt vonWarum schlägt mein Makefile-Befehl fehl, wenn Shell-Ausdrücke verwendet werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn