En nodejs, la única forma de ejecutar comandos externos es a través de sys.exec (cmd). Me gustaría llamar a un comando externo y darle datos a través de stdin. En nodejs todavía no parece haber una manera de abrir un comando y luego enviar datos a él (solo para ejecutar y recibir sus salidas estándar + error), por lo que parece que la única forma en que tengo que hacer esto ahora es a través de una sola cadena de comando, tales como:¿Cómo puedo escapar de una cadena para un comando de shell en un nodo?
var dangerStr = "bad stuff here";
sys.exec("echo '" + dangerStr + "' | somecommand");
la mayoría de respuestas a preguntas de este tipo se han centrado en cualquiera de expresiones regulares que no funciona para mí en nodejs (que utiliza el motor JavaScript V8 de Google) o características nativas de otros idiomas como el Pitón.
Me gustaría escapar de dangerStr para que sea seguro componer una cadena ejecutiva como la de arriba. Si esto ayuda, dangerStr contendrá datos JSON.
Para shell de tipo Bourne puede usar el siguiente algoritmo para escapar cadenas de forma segura: 1) reemplazar todas las ocurrencias de comillas simples (') con la comilla simple de cuatro caracteres, barra invertida, comilla simple, comilla simple (' \ '') 2) agregue una comilla simple adicional al principio y al final de la cadena modificada. Las comillas simples iniciales y finales no están codificadas de manera perfectamente eficiente, pero todavía funciona: "se convierte en '' \ '' 'cuando podría ser solo \'. –
Para aclarar: me tomó un poco de tiempo entender el consejo de @ ChrisJohnsen, pero se comprueba. Si quieres 'do not do that' en el shell, haz' echo 'no hacer eso para producir 'do not do that'. – mikemaccana