linux nodejs exec,nodeJS exec对“cd”shell cmd不起作用

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上运行,但不能运行 看到这里

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值