Einige Kommentare beziehen sich auf die vollständige "Geschichte" hinter diesem Problem, aber ich beschloss, es zu verkürzen, weil es zu lang und schwer zu folgen war. Ich präsentiere Ihnen ein möglichst kurzes Beispiel. Für diejenigen, die daran interessiert sind, den vollständigen Kontext des Problems zu kennen: Es ist in der früheren Überarbeitung der Frage verfügbar.
> Dies: basedir=$(dirname "$(echo "
ist die erste Zeile (ausgenommen Hashbang) in Skripten generiert von npm nach der Installation eines Pakets, das mit CLI geliefert wird.
Aus irgendeinem Grund wird basedir
" | sed -e 's,\,/,g')")PATH
falsch aufgelöst und deshalb kann der Knoten kein Modul finden und abstürzen. Ich habe es geschafft, das Problem auf der Pipe in der Subshell auf der neuesten Git für Windows git-bash einzugrenzen. Ausführen:
druckt:
%Vor%Ich kann keine anderen Leute mit diesem Problem finden, also denke ich, dass etwas mit meinem env nicht stimmt (Windows 10 Pro, Git für Windows 2.8.4) und persönlich habe ich keine Ideen, woher es kommen könnte. Meine Ergebnisse:
Snippet:
%Vor%Danke an agc für unschätzbare Hilfe, um dies bis zu diesem Punkt herauszufinden.
Meine %code% Variable sieht folgendermaßen aus:
%Vor%auch
%Vor%Zusammenfassend die Kommentare, die kurze (tl; dr) Version: Downgrade, Upgrade und / oder Neuinstallation von MSYS und MinGW, die mit Git für Windows geliefert werden.
MSYS ergänzt MinGW , und die von Git für Windows bereitgestellte Version kann von den ursprünglichen Betreuern von MSYS geändert werden. Es gab einen Fehler, der gegen MSYS gemeldet wurde , was anscheinend das gleiche Problem ist (mit "mingw version: 64 bit" gebündelt mit Git Version 2.8.3.windows.1 "), wurde aber als" funktioniert für mich "markiert (dh" kann nicht reproduzieren "). Aber es gab einen Kommentar, dass das Problem im Umpacken sein könnte:
"Bitte beachten Sie, dass MSYS, wie mit git für Windows gebündelt, von unserer offiziellen Distribution modifiziert werden kann (und 64-bit MinGW gehört sicherlich nicht zu uns), daher unterstützen wir diese beiden nicht." Ссылка
Lange Geschichte kurz, sieht aus wie ein Bug.
%Vor%
Dies scheint ein Beispiel für das XY-Problem zu sein. Lassen Sie uns diese Linie aufschlüsseln:
%Vor%
Dies ist normalerweise der Pfad zum Skript, zum Beispiel ./alfa.sh
%Vor%
Dies ersetzt umgekehrte Schrägstriche durch Schrägstriche. Hier beginnt diese Zeile auseinander fallen:
Sie brauchen nicht -e
, Sie können einfach sed 's,\,/,g'
Sie brauchen wahrscheinlich nicht g
, normalerweise wird nur ein Schrägstrich wie gezeigt
oben
Das Ändern der Schrägstriche macht keinen Sinn. Bash, sogar unter Windows, ist Verwenden Sie bereits Schrägstriche vorwärts
Wenn aus irgendeinem Grund die Schrägstriche geändert werden müssen, ist Sed nicht das Richtige Werkzeug dafür ist Cygpath:
%Vor%%Vor%
Jetzt rufst du dirname nach sed / cygpath an. Es sollte vorher aufgerufen werden, dass Weg sed / cygpath muss nicht so viel ersetzen:
%Vor%Schließlich ist der Befehl sed aus einem anderen Grund schlecht; wenn du es sein willst einen Pfad auszuspucken, sollte es ein absoluter sein, denn warum nicht?
%Vor%Beachten Sie, dass keine Pipe beteiligt ist. Ich werde auch hinzufügen, dass dieses Problem war wurde kürzlich dem NPM-Repo vorgestellt. Du könntest die Devs dort kommentieren.