Sind shell-Skripts, die empfindlich auf die Kodierung und zeilenendungen?

Ich mache eine NW.js app auf dem Mac, und möchten, führen Sie die app im dev-Modus durch Doppelklick auf ein Symbol. Ersten Schritt, den ich versuche zu machen meiner shell-Skript arbeiten.

Mit VSCode auf Windows (ich wollte um Zeit zu gewinnen), habe ich eine run-nw Datei auf den root von meinem Projekt mit diesem:

#!/bin/bash

cd "src"
npm install

cd ..
./tools/nwjs-sdk-v0.17.3-osx-x64/nwjs.app/Contents/MacOS/nwjs "src" &

aber ich bekomme diese Ausgabe:

$ sh ./run-nw

: command not found  
: No such file or directory  
: command not found  
: No such file or directory  

Usage: npm <command>

where <command> is one of:  (snip commands list)

(snip npm help)

npm@3.10.3 /usr/local/lib/node_modules/npm  
: command not found  
: No such file or directory  
: command not found

Ich wirklich nicht verstehen kann:

  • es scheint, dass es dauert, leere Zeilen als Kommandos. In meinem editor (VSCode) habe ich versucht zu ersetzen \r\n mit \n (im Fall der \r Probleme schafft), aber es ändert sich nichts.
  • es scheint, dass es nicht die Ordner (mit oder ohne dirname Anleitung), oder es vielleicht nicht wissen, über die cd Befehl ?
  • es scheint, dass Sie es nicht verstehen, die install argument npm
  • der Teil, der wirklich weirds mich, ist, dass es immer noch läuft die app (wenn ich einen npm install manuell)...

Nicht in der Lage, damit es richtig funktioniert, und zu Ahnen, etwas unheimliches mit der Datei selbst, habe ich mir eine neue ein direkt auf dem Mac, indem Sie vim diese Zeit. Ich habe die gleichen Daten eingegeben Anweisungen, und... jetzt funktioniert es ohne Problem.
Ein diff auf die beiden Dateien, die zeigt genau null Unterschied.

Was kann der Unterschied sein? Was das erste Skript nicht funktioniert? Wie finde ich das heraus?

Update

Folgenden die akzeptierte Antwort, Empfehlungen, nach der falschen Zeilenenden zurück kam, überprüfte ich mehrere Dinge. Es stellt sich heraus, dass, seit ich schrieb meine ~/.gitconfig von meinem Windows-Rechner hatte ich autocrlf=true, so dass jedes mal, wenn ich veränderte die bash-Datei unter Windows, es re-legen Sie die Zeilenenden zu \r\n.
So, zusätzlich zu Laufenden dos2unix (die Sie haben zu installieren mit Homebrew auf dem mac), wenn Sie mit Git, überprüfen Sie Ihre config.

versuchen dos2unix ?
Wenn Sie ein shell-Skript unter Linux, zumindest alle shell-Implementierungen, die ich bisher begegnet sind, würde sich aufregen, wenn Sie einen \r irgendwo. Nein, Sie sagen, dass Sie entfernt haben, \r, und ich hoffe, dass Sie verifiziert, dass Sie wirklich Weg sind. Für der sicheren Seite zu sein, sollten Sie Ihre Datei im hexadezimal-Ebene, um sicherzustellen, dass Sie nicht haben, andere komische Zeichen. Der nächste Schritt wäre dann das script ausführen mit sh -x ./run-nw, um weitere Informationen zu erhalten.
Ein anderer guter Befehl um zu schauen für komische Zeichen in einer text-Datei ist LC_ALL=C cat -vet /path/to/file. Wenn die Datei normal, es wird normal Aussehen (außer für die mit einem "$" am Ende jeder Zeile). Alles abnormale sollte, stehen ziemlich gut. DOS/Windows-Dateien haben "^M$" am Ende der Zeilen.

InformationsquelleAutor thomasb | 2016-09-16

Schreibe einen Kommentar