In nodejs, l'unico modo per eseguire comandi esterni è tramite sys.exec (cmd). Mi piacerebbe chiamare un comando esterno e dargli dati tramite stdin. In nodejs non sembra ancora essere un modo per aprire un comando e quindi spingere i dati su di esso (solo per eseguire e ricevere i suoi output standard + errore), quindi sembra che l'unico modo per farlo ora sia tramite un unico comando stringa come:Come faccio a uscire da una stringa per un comando di shell nel nodo?
var dangerStr = "bad stuff here";
sys.exec("echo '" + dangerStr + "' | somecommand");
la maggior parte delle risposte a domande come questa si sono concentrati su entrambi espressione regolare che non funziona per me in nodejs (che utilizza il motore JavaScript V8 di Google) o caratteristiche native da altri linguaggi come Pitone.
Mi piacerebbe scappare da dangerStr in modo che sia sicuro comporre una stringa exec come quella sopra. Se aiuta, dangerStr conterrà dati JSON.
Per le shell di tipo Bourne è possibile utilizzare il seguente algoritmo per evitare le stringhe in modo sicuro: 1) sostituire tutte le occorrenze di virgoletta singola (') con la virgoletta singola sequenza a quattro caratteri, barra rovesciata, virgoletta singola, virgoletta singola (' \ '') 2) aggiungi una virgola singola aggiuntiva all'inizio e alla fine della stringa modificata. Le virgolette singole e finali non sono codificate in modo perfettamente efficiente, ma funziona ancora - 'diventa' '\' '' quando potrebbe essere solo \ '. –
Per chiarimenti: mi ci è voluto un po 'per capire il consiglio di @ ChrisJohnsen ma si verifica. Se vuoi 'non farlo sulla shell, fai 'echo' don '\' t do that' per produrre' do not do that'. – mikemaccana