2016-11-23 3 views
0

ich bei diesem Beispiel hier war auf der Suche:Ausführen Node.js-Datei in einem Bash-Skript

https://bbs.archlinux.org/viewtopic.php?id=168479

Er sagt, ich auf diese Weise ausführen kann JS/Node.js:

#!/bin/sh 
exec node --harmony <<EOF 
console.log("hello") 
EOF 

Does das macht irgendjemanden einen Sinn? Was genau ist los?

Nach einigen Googling-Looks zieht dies die Daten zwischen den EOF-Zeichen in stdin.

Wenn dies möglich ist, wird es mir erlauben, ein bestimmtes Problem zu lösen - nämlich die ausführbare Datei des Knotens auf dem Benutzer $ PATH zu verwenden, während die Knoten ausführbare Flags übergeben werden (in diesem Beispiel ist es "--harmony").

Wenn Sie den Link betrachten, müssen Sie nur ein wenig nach unten gehen, um den obigen Code zu sehen.

Kann mir jemand erklären, worum es bei dieser EOF-Syntax geht?

Ein spezielles Problem, das ich habe, ist, dass ich nicht diesen Code ausführen kann:

enter image description here

Meine Vermutung ist, dass wir stdin an die Node.js ausführbar sind vorbei, und aus irgendeinem Grund der Lage, es ist nicht zu lösen Pfade richtig -

enter image description here

obwohl cli.js im selben Verzeichnis wie cli-inspect.sh ist, erfordern Funktion nicht funktioniert. In der ersten Zeile sehen wir, dass __dirname "." Ist, normalerweise wäre das nicht der Fall.

+0

Es ist unklar für mich, dass Sie fragen. –

+0

Was ist das << EOF EOF Syntax? –

+0

Es ist 'Here Document' https://en.wikipedia.org/wiki/Here_document#Unix_shells –

Antwort

1

Wie im Kommentar zu Ihrer Frage erwähnt, ist es ein heredoc. Es wählt den gesamten Text von <<EOF bis zur ersten Instanz EOF. Sie können andere Markernamen verwenden, nicht nur EOF.

Sie können einen Textblock mit Zeilenumbrüchen definieren.

Die Syntax hat die äquivalente Wirkung von

echo 'console.log("hello")' | exec node --harmony 

, dass sie Rohre der Inhalt des heredoc zum Knoten. Aber Sie können neue Zeilen einfügen, was schön ist.

Verwandte Themen