Sind Shell-Skripte empfindlich gegenüber Kodierung und Zeilenenden?

Ich erstelle eine NW.js-App auf einem Mac und möchte die App im Entwicklungsmodus ausführen, indem ich auf ein Symbol doppelklicke. Erster Schritt, ich versuche mein Shell-Skript zum Laufen zu bringen.

Mit VSCode unter Windows (ich wollte Zeit gewinnen) habe ich ein @ erstelrun-nw -Datei im Stammverzeichnis meines Projekts mit folgendem Inhalt:

#!/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)

[email protected] /usr/local/lib/node_modules/npm  
: command not found  
: No such file or directory  
: command not found

Ich verstehe wirklich nicht:

it nimmt anscheinend leere Zeilen als Befehle an. In meinem Editor (VSCode) habe ich versucht, @ zu ersetz\r\n mit\n (falls das\r schafft Probleme), aber es ändert sich nichts.es scheint die Ordner nicht zu finden (mit oder ohnedirname Anweisung), oder vielleicht weiß es nicht über diecd Befehl es scheint, dass es das @ nicht versteinstall argument tonpmder Teil, der mich wirklich verrückt macht, ist, dass die App immer noch läuft (wenn ich ein @ gemacht hanpm install manuell) ...

Nicht in der Lage, es richtig zu machen und etwas Seltsames mit der Datei selbst zu vermuten, habe ich eine neue direkt auf dem Mac erstellt, diesmal mit vim. Ich habe genau die gleichen Anweisungen eingegeben und ... jetzt funktioniert es ohne Probleme.
A diff auf den beiden Dateien zeigt genau null Unterschied.

Was kann der Unterschied sein? Was kann dazu führen, dass das erste Skript nicht funktioniert? Wie kann ich das herausfinden?

Aktualisiere

Nach den Empfehlungen der akzeptierten Antwort habe ich mehrere Dinge überprüft, nachdem die falschen Zeilenenden zurückgekommen sind. Es stellt sich heraus, dass ich mein @ kopiert ha~/.gitconfig von meinem Windows-Rechner hatte ichautocrlf=true, also jedes Mal, wenn ich die Bash-Datei unter Windows ändere, werden die Zeilenenden auf @ zurückgeset\r\n.
So, zusätzlich zum Ausführen von dos2unix (das Sie mit Homebrew auf dem Mac installieren müssen), wenn Sie Git verwenden, überprüfen Sie Ihre Konfiguration.

Antworten auf die Frage(8)

Ihre Antwort auf die Frage