nodeJS执行不工作的"cd "壳牌cmd
nodeJS exec does not work for "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状态试图工作,但失败,因为它不是在git目录中执行,但CD CMD失败,阻止其他命令的进一步成功执行。在nodeJS shell以及nodeJS+ExpressJS webserver中尝试过
每个命令都在单独的shell中执行,因此第一个cd
只影响该shell进程,然后该进程终止。如果您想在特定目录中运行git
,只需让Node为您设置路径:
exec('git status', {cwd: '/home/ubuntu/distro'}, /* ... */);
cwd
(当前工作目录)是exec
可用的众多选项之一。
而不是多次调用exec()。对多个命令调用一次exec()
你的shell正在执行cd
,但这只是每个shell在完成后扔掉它的工作目录。所以你又回到了起点。
cmd
变量包含多条指令,而不是一条。CD 将在这种情况下工作。
var cmd = `ls
cd foo
ls`
var exec = require('child_process').exec;
exec(cmd, function(err, stdout, stderr) {
console.log(stdout);
})
注意:此代码应该在Linux上工作,但不能在Windows上工作。看到
正在工作。然后把壳扔掉。Node为每个exec
创建一个新的shell。
以下选项可以提供帮助:http://nodejs.org/api/child_process.html#child_process_child_process_exec_command_options_callback
相关文章:
- 铬:“;未捕获的语法错误:意外的标记:"
- 可以设置“;文件名"发生错误时显示的内联脚本标记的
- JS表单提交"无法使用Chrome数据保护程序加载此页面.尝试重新加载页面.调试信息:POST CISmtuK
- 检测电话窃听,即:<a href="电话:xxx">在UIWebview上
- 使用“+="操作人员
- //而不是在src=“”上使用http://"属性
- "未捕获的语法错误:意外的标记}"
- 可以<脚本类型=“;text/javascript”>window.location=“/"</
- "实例范围”;TypeScript类的getter/setter
- Javascript复选框函数:;缺少:在属性id之后"
- "“;变量未引用正确的对象
- "日期“;AJAX请求返回的类型值未定义
- 得到"TypeError:无法读取属性'filename'未定义的“;调用“npm start
- Soundcloud api"未捕获的类型错误:无法读取属性'uri'“未定义”;
- "工具提示"jQuery插件坏了
- "锻造;React中的表达式
- 图像可以从源<img src=""/>.TEXT可以在没有javascript的情况下从外部
- 如何提取“;href"最近列表项中的属性值
- CKEditor如何允许href="javascript:void(0)"在小部件中
- 插入“;img src"在javascript中