nodeJS exec對“cd”shell cmd不起作用
var sys = require('sys'), exec = require('child_process').exec; exec("cd /home/ubuntu/distro", function(err, stdout, stderr) { console.log("cd: " + err + " : " + stdout); exec("pwd", function(err, stdout, stderr) { console.log("pwd: " + err + " : " + stdout); exec("git status", function(err, stdout, stderr) { console.log("git status returned " ); console.log(err); }) }) })
cd: null : pwd: null : / git status returned { [Error: Command failed: fatal: Not a git repository (or any of the parent directories): .git ] killed: false, code: 128, signal: null }
nodeJS exec對“cd”shell cmd不起作用。 正如你在下面看到的,pwd工作,git status正在嘗試工作,但因為它不在git目錄中執行而失敗,但cd cmd無法停止進一步成功執行其他cmd。 嘗試在nodeJSshell以及nodeJS + ExpressJSnetworking伺服器。
每個指令都在一個單獨的shell中執行,是以第一個cd隻影響那個終止的shell程序。 如果你想在特定的目錄下運作git ,隻需讓Node為你設定path:
exec('git status', {cwd: '/home/ubuntu/distro'}, );
cwd (目前工作目錄)是可用于exec的許多選項之一 。
這是工作。 但是,這是把殼扔掉。 Node為每個exec創build一個新的shell。
以下是可以提供幫助的選項: http : //nodejs.org/api/child_process.html#child_process_child_process_exec_command_options_callback
而不是多次調用exec()。 為多個指令調用exec()一次
你的shell正在執行cd但是它隻是在每個shell完成之後抛棄它的工作目錄。 是以,你回到原點。
在你的情況下,你不需要多次調用exec()。 您可以確定您的cmdvariables包含多個指令,而不是1.在此情況下,CD 将起作用。
var cmd = `ls cd foo ls` var exec = require('child_process').exec; exec(cmd, function(err, stdout, stderr) { console.log(stdout); })
注意 :這段代碼應該可以在Linux上運作,但不能運作 看到這裡