In nodejs können externe Befehle nur über sys.exec (cmd) ausgeführt werden. Ich möchte einen externen Befehl aufrufen und geben Sie Daten über Stdin. In nodejs scheint es immer noch keine Möglichkeit zu geben, einen Befehl zu öffnen und dann Daten dorthin zu schieben (nur um exec auszuführen und seine Standard + Fehlerausgaben zu erhalten), so scheint es, dass die einzige Möglichkeit, dies jetzt zu tun, ist über einen einzelnen String-Befehl wie:Wie kann ich einen String für einen Shell-Befehl im Knoten entkommen lassen?
var dangerStr = "bad stuff here";
sys.exec("echo '" + dangerStr + "' | somecommand");
die meisten Antworten auf Fragen wie diese auf entweder regex konzentriert haben, die für mich nicht in NodeJS arbeiten oder nativen Funktionen aus anderen Sprachen (die V8 Javascript-Engine von Google verwendet) wie Python.
Ich möchte dangerStr entkommen, so dass es sicher ist, eine Exec-Zeichenfolge wie die oben zu komponieren. Wenn es hilft, enthält dangerStr JSON-Daten.
Für Bourne-Shells können Sie den folgenden Algorithmus verwenden, um Strings sicher zu entgehen: 1) ersetzen Sie alle Vorkommen von einzelnen Anführungszeichen (') durch die vier Zeichenfolgen, einfache Anführungszeichen, Backslash, einfache Anführungszeichen, einfache Anführungszeichen (' \ '') 2) füge am Anfang und am Ende der modifizierten Zeichenkette ein zusätzliches einfaches Anführungszeichen hinzu. Führende und abschließende einfache Anführungszeichen werden nicht perfekt effizient codiert, funktionieren aber immer noch - "wird" "\" ", wenn es einfach sein könnte". –
Zur Verdeutlichung: Es hat eine Weile gedauert, bis ich @ ChrisJohnsens Ratschlag verstanden habe, aber es sieht aus. Wenn du das auf der Shell nicht machen willst, dann tu 'echo' don 't do that', um 'do not do' zu erzeugen. – mikemaccana