2015-10-05 7 views
5

child process api को node.js. में खोल स्क्रिप्ट निष्पादित करने के लिए उपयोग किया जा सकता है।शैल विकल्प का उपयोग कर Node.js child_process के साथ बैश का उपयोग

इम child_process.exec (आदेश [, विकल्प], कॉलबैक) समारोह

एक विकल्प कार्यकारी के उपयोगकर्ता खोल सेट कर सकते हैं के रूप में उपयोग करते हुए: '/ path/to/खोल' फ़ील्ड का चयन करने के इस्तेमाल करने के लिए खोल। ('/ Bin/sh' के लिए डिफ़ॉल्ट)

{shell: '/ bin/bash'} पर विकल्प सेट करने से निष्पादन को बैश के साथ कमांड नहीं चलाया जाता है।

मैंने "echo $ 0" आदेश जारी करके इसे सत्यापित किया है जो "/ bin/sh" प्रिंट करता है।

मैं शैल विकल्प के माध्यम से child_process.exec के साथ बैश का उपयोग कैसे कर सकता हूं?

(मेरा लक्ष्य bashrc में मेरा पथ परिभाषाओं का उपयोग करना, अब है जब मैं घुरघुराना द्विआधारी नहीं पाया जा सकता है इस्तेमाल करने की कोशिश। CWD, विकल्प शब्दकोश काम करता है के रूप में उम्मीद में वर्तमान कार्यशील निर्देशिका सेटिंग)

----------------- अद्यतन, उदाहरण के

'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); 
}); 

आउटपुट:

/bin/sh 

which bash 

प्रिंट: /bin/bash

उत्तर

3

अपने स्थापना या अपने कोड में गलत तरीके से विकल्प गुजर में हो सकता है। चूंकि आपने अपना कोड पोस्ट नहीं किया है, इसलिए यह कहना मुश्किल है। लेकिन मैं निम्न करने में समर्थ था और यह काम किया (नोड 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) 
}) 

उत्पादन होगा:

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

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

मैं कमांड के रूप में इस्तेमाल किया time के बाद से यह एक पार्टी है कि है और sh नहीं करता है। आशा है कि ये आपकी मदद करेगा!

+0

वास्तव में काम करता है, ऐसा लगता है कि ओपी नोड के पुराने संस्करण पर है जहां यह समर्थित नहीं है (मुझे एक ही समस्या थी) – Yousef

संबंधित मुद्दे