¿Cómo puedo ejecutar comandos de shell en secuencia?

Tengo una lista de comandos de shell que quiero ejecutar con nodejs:

// index.js
var commands = ["npm install", "echo 'hello'"];

var exec = require('child_process').exec;

for (var i = 0; i < commands.length; i++) {
    exec(commands[i], function(err, stdout) {
        console.log(stdout);
    });
}

Cuando ejecuto esto, los comandos se ejecutan en orden inverso. ¿Por qué está pasando esto? ¿Cómo ejecuto los comandos en secuencia?

Mejor aún, ¿hay alguna manera de ejecutar comandos de shell?sin usar nodejs? Encuentro que su manejo asíncrono del caparazón es un poco engorroso.

NOTA:

Sé que a las bibliotecas les gustashelljs existe. Estoy tratando de hacer esto solo con base nodejs.

Respuestas a la pregunta(2)

Su respuesta a la pregunta