2015-10-05 2 views
5

È possibile utilizzare child process api per eseguire lo script di shell in node.js.Utilizzo di bash con child_process Node.js che utilizza l'opzione shell non riuscita

Im utilizzando il child_process.exec (comando [opzioni], callback) funzione

come opzione l'utente del exec può impostare la shell: '/ path/to/shell' campo per selezionare la shell da utilizzare. (Predefinito a '/ bin/sh')

L'impostazione delle opzioni su {shell: '/ bin/bash'} non rende eseguibile il comando exec con bash.

Ho verificato questo emettendo il comando "echo $ 0" che stampa "/ bin/sh".

Come posso utilizzare bash con child_process.exec tramite l'opzione shell?

(il mio obiettivo è di fare uso delle mie definizioni di percorso in bashrc, ora quando provo a utilizzare grugnito il binario non può essere trovato. Impostazione del CWD, directory di lavoro corrente nelle opzioni di opere del dizionario come previsto)

----------------- UPDATE, ad esempio

'use strict'; 
var cp = require('child_process'); 
cp.exec('echo $0', { shell: '/bin/bash' }, function(err, stdout, stderr){ 
    if(err){ 
     console.log(err); 
     console.log(stderr);   
    } 
    console.log(stdout); 
}); 

uscita:

/bin/sh 

which bash 

stampe: /bin/bash

risposta

3

potrebbe essere nel vostro impostazione o il passaggio delle opzioni in modo non corretto nel codice. Dal momento che non hai pubblicato il tuo codice, è difficile da dire. Ma io ero in grado di fare quanto segue e ha funzionato (usando nodo 4.1.1):

"use strict"; 
const exec = require('child_process').exec 

let child = exec('time',{shell: '/bin/bash'}, (err, stdout, stderr) =>  { 
    console.log('this is with bash',stdout, stderr) 
}) 
let child2 = exec('time',{shell: '/bin/sh'}, (err, stdout, stderr) => { 
    console.log('This is with sh', stdout, stderr) 
}) 

L'output sarà:

this is with bash 
real 0m0.000s 
user 0m0.000s 
sys 0m0.000s 

This is with sh /bin/sh: 1: time: not found 

ho usato time come comando dal momento che è uno che ha bash e sh no. Spero che aiuti!

+0

In effetti, sembra che l'OP si trovi su una versione precedente di Nodo in cui non è supportato (ho avuto lo stesso problema) – Yousef