Node.js Shell Script y Argumentos

Necesito ejecutar un script bash en node.js. Básicamente, el script creará una cuenta de usuario en el sistema. Encontré este ejemplo que me da una idea de cómo hacerlo. Sin embargo, el script en sí necesita argumentos como el nombre de usuario, la contraseña y el nombre real del usuario. Todavía no puedo entender cómo pasar esos argumentos al guión haciendo algo como esto:

var commands = data.toString().split('\n').join(' && '); 

¿Alguien tiene una idea de cómo puedo pasar esos argumentos y ejecutar el script bash dentro de node.js a través de una conexión ssh? Gracias

Vea la documentación aquí . Es muy específico sobre cómo pasar argumentos de línea de comando. Tenga en cuenta que puede usar exec o spawn . spawn tiene un argumento específico para los argumentos de la línea de comandos, mientras que con el exec simplemente pasaría los argumentos como parte de la cadena de comandos para ejecutar.

Directamente de la documentación, con comentarios de explicación en línea

 var util = require('util'), spawn = require('child_process').spawn, ls = spawn('ls', ['-lh', '/usr']); // the second arg is the command // options ls.stdout.on('data', function (data) { // register one or more handlers console.log('stdout: ' + data); }); ls.stderr.on('data', function (data) { console.log('stderr: ' + data); }); ls.on('exit', function (code) { console.log('child process exited with code ' + code); }); 

Mientras que con el ejecutivo

 var util = require('util'), exec = require('child_process').exec, child; child = exec('cat *.js bad_file | wc -l', // command line argument directly in string function (error, stdout, stderr) { // one easy function to capture data/errors console.log('stdout: ' + stdout); console.log('stderr: ' + stderr); if (error !== null) { console.log('exec error: ' + error); } }); 

Finalmente, tenga en cuenta que el ejecutor almacena la salida. Si desea transmitir la salida de vuelta a un cliente, debe usar spawn .

 var exec = require('child_process').exec; var child = exec('cat *.js | wc -l', function(error, stdout, stderr) { if (error) console.log(error); process.stdout.write(stdout); process.stderr.write(stderr); }); 

De esta forma es más agradable porque console.log imprimirá líneas en blanco.

Puedes usar process.argv . Es una matriz que contiene los argumentos de línea de comando. El primer elemento será node el segundo elemento será el nombre del archivo JavaScript. Todos los elementos siguientes serán cualquier línea de comando adicional que hayas dado.

Puedes usarlo como:

 var username = process.argv[2]; var password = process.argv[3]; var realname = process.argv[4]; 

O itera sobre la matriz. Mire el ejemplo: http://nodejs.org/docs/latest/api/all.html#process.argv