51Testing软件测试网
常用链接
我的随笔
我的评论
我参与的随笔
留言簿
(3)
给我留言
查看公开留言
查看私人留言
随笔档案
2021年6月 (1)
2021年3月 (1)
2020年9月 (1)
2020年3月 (1)
2020年1月 (2)
2019年12月 (3)
2019年11月 (5)
2019年10月 (1)
2019年9月 (2)
2019年8月 (14)
2019年7月 (20)
2019年6月 (15)
2019年5月 (12)
2019年4月 (19)
2019年3月 (20)
2019年2月 (9)
2019年1月 (16)
2018年12月 (17)
2018年11月 (21)
2018年10月 (16)
2018年9月 (20)
2018年8月 (22)
2018年7月 (3)
2018年6月 (1)
2018年5月 (7)
2018年4月 (1)
2018年3月 (3)
2018年2月 (6)
2018年1月 (2)
2017年9月 (8)
2017年8月 (28)
2017年7月 (3)
2016年11月 (1)
2016年6月 (1)
2016年4月 (1)
2016年2月 (2)
2015年7月 (1)
2015年5月 (1)
2015年4月 (2)
2015年3月 (1)
2015年2月 (2)
2015年1月 (6)
2014年12月 (3)
2014年11月 (3)
2014年10月 (3)
2014年9月 (2)
2014年8月 (8)
2014年7月 (16)
2013年12月 (5)
2013年11月 (1)
2013年10月 (3)
2013年9月 (2)
2013年8月 (2)
2013年7月 (3)
2013年5月 (1)
2013年4月 (2)
2013年3月 (2)
2013年2月 (3)
2013年1月 (4)
2012年12月 (4)
2012年11月 (4)
2012年10月 (3)
2012年9月 (4)
2012年8月 (3)
2012年7月 (4)
2012年6月 (2)
2012年5月 (2)
2012年4月 (1)
2012年3月 (2)
2012年2月 (2)
2012年1月 (1)
2011年12月 (3)
2011年11月 (2)
2011年10月 (1)
2011年9月 (4)
2011年8月 (3)
2011年7月 (2)
2011年6月 (4)
2011年5月 (4)
2011年4月 (2)
2011年3月 (4)
2011年2月 (4)
2011年1月 (7)
2010年12月 (7)
2010年11月 (5)
2010年10月 (4)
2010年9月 (7)
2010年8月 (7)
2010年7月 (3)
2010年6月 (3)
2010年5月 (4)
2010年4月 (4)
2010年3月 (5)
2010年2月 (3)
2010年1月 (4)
2009年12月 (3)
2009年11月 (3)
2009年10月 (1)
2009年9月 (3)
2009年8月 (2)
2009年7月 (3)
2009年6月 (1)
2009年5月 (2)
2009年4月 (4)
2009年3月 (5)
2009年1月 (1)
2008年11月 (2)
2008年7月 (5)
2008年6月 (4)
文章分类
行业资讯(45)
(rss)
软件业务知识(43)
(rss)
软件开发知识(33)
(rss)
软件测试工具(39)
(rss)
软件测试技术(157)
(rss)
软件测试管理(40)
(rss)
软件测试职业发展(57)
(rss)
51testing软件测试网
搜索
最新评论
1. re: 淘宝后台技术大揭秘,不看这篇你双十一要损失几个亿!
关注官方公众号“Atstudy网校”,点击中间菜单栏“双11”,领取双十一技术内幕资料。
--51testing
2. re: 软件测试流程的一点感悟
提交缺陷时只需要描述现象即可,过多的分析可能会误导开发
--凡客诚品
3. re: 软件测试流程的一点感悟
阿达宿建德江阿斯顿
--凡客礼品卡
4. re: 手机软件测试的经验总结
很好啊~不错
--乐蜂网
5. re: 手机软件测试的经验总结
很好啊~
--罗莱家纺
阅读排行榜
1. 软件测试流程的一点感悟(1040)
2. 5年经验之谈:月薪3000到30000,测试工程师的变“行”记!(908)
3. 测试自动化及软件测试工具的比较(829)
4. 软件为什么要做异常测试?测试员必知的22个测试点总结!(768)
5. 银行线上信贷系统如何做好接口测试?手把手教你接口工具Postman(734)
评论排行榜
1. 软件测试流程的一点感悟(4)
2. 软件测试的原则和经验 (4)
3. 嵌入式软件测试技巧(2)
4. 手机软件测试的经验总结 (2)
5. 常用软件测试工具的分析与比较(1)
Powered by:
博客园
模板提供:
沪江博客
IT博客
|
首页
|
发新随笔
|
发新文章
|
联系
|
聚合
|
管理
记一个Windows命令行引发的Bug
文章来源:
http://www.51testing.com/html/30/n-3724330.html
2018 年刚开始就踩了一个很懵逼的雷,居然还是关于 Windows 的命令行的。
背景
背景是这样的,在开发 Lavas cli 的过程中,需要通过开发者选定的模版类型拼接出对应的 repo 地址和分支名,然后通过 Node.js 从 github 上拉取合适的模版到本地给开发者使用。这个需求很明确,就是涉及到需要使用 Node.js 操作 git 命令行,然后就很自然的就使用 child_process.exec 搞起来了。
想要实现这个需求,大概先组织一下命令行,大概需要干下面几件事情:
然后问题就来了,child_process.exec 如何执行多个命令行呢?child_precess.exec 命令只能支持传入一条命令。所以需要将多条命令合成一条命令才行。
同时执行多行命令
无论是 Linux/Mac 还是 Windows 的 shell 命令都支持一条命令来执行多条命令的。一共有 &&,&,||,| 这么几种方式,这几种方式分别代表着不同的含义:
&&:command1 && command2,如果 command1 执行成功了,就执行命令 command2,如果 command1 失败了,就不会执行 command2 了。
&:command1 & command2,无论 command1 执行成功与否都会执行 command2。
||:command1 || command2,如果 command1 执行成功了,就不会执行 command2 了,如果 command1 失败了,就会继续执行 command2。
|:command1 | command2,command1 的结果做为 command2 的参数,如果 command1 失败了,整个命令也就都失败了。
Linux/Mac 下还可以使用 ; 来链接两条命令,顺序执行命令,不管成功与否都往后执行,和 & 含义一样。
了解了这些逻辑之后,我们的需求肯定就是选择 && 来实现我们前面所说的需求:
# 假如已经 clone 了模版到 /some/target/path 目录的话
cd /some/target/path && git pull && git checkout some_branch_name
基于我们上面的种种分析,我们的代码基本上就是以下这个样子了:
然后在 Linux/Mac 和 windows 上测试了一遍,发现没什么问题,就觉得 OK 了,但是直到今天被 Windows 用户曝出从 github 上拉取代码一直报 fatal: Not a git repository (or any of the parent directories): .git 的错误。
排查错误
看这个报错,应该就是执行 git 命令的时候,没有找对相应的目录,所以排查的重点就是这几条命令了,如果是没有找到相应的 git 目录的话,这个 cd 命令就很容易被怀疑了。
这里需要交代个背景,我们的 targetPath 是通过 process.env['APPDATA'] 和 process.env['HOME'] 的方式取得的:
也就是说,对于 targetPath 有两件事我们是能够明确的:
· 在 Linux/Mac 下,targetPath 的路径为 /User/zoumiaojiang/.lavas-project
· Windows 下就是 c:\\Users\\Administrator\\AppData\\Roaming\\.lavas-project
只有在 Windows 下才会报错,那么执行命令 cd c:\\Users\\Administrator\\AppData\\Roaming\\.lavas-project 到底能有什么问题呢?为什么我自己在 Windows 上测试就没有问题呢?然后我在自己电脑上也敲了如下图的命令,完全没问题啊:
瞬间陷入懵逼状态中,感觉陷入僵局。。
windows cd 命令
就在懵逼的过程中,瞎敲命令行,居然发现了这种情况:
而这种情况是失败的,居然没有 cd 成功,然而这个和成功的 case 的差别,仅仅只是因为这次我是在 d:\ 盘执行的。回想起 Lavas cli 的报错,果然不是在 c:\ 盘执行的命令行,而我之前一直测试成功,因为我每次都是在 c:\ 盘执行命令。这下彻底懂了:
· Windows 不支持直接跨盘执行 cd 命令
· 在执行 cd 命令之前,必须先指定盘
这下果然成功了。问题终于找到了,突然回想,这个错误犯的也太低级了,之前操作 Windows 命令行的时候,这个操作简直是潜意识的,久疏 Windows 之后,居然把这么个事给忘记了。既然找到了病因,就好解决了,我们改一下 downloadFromGit 的代码就可以了:
之前的 Bug 是因为 Windows 下不能跨盘直接 cd,导致没有直接 cd 到 targetPath,所以不能正确的进入 git 目录,导致会报 fatal: Not a git repository (or any of the parent directories): .git 错误。
PS: 往往解决 Bug 都是容易解决的,定位 Bug 却很难,记下这个有意思的 Bug,提醒下自己以后一定要仔细,测试一定要充分。
如想了解更多关于Windows命令行引发的Bug ,请前往51Testing软件测试网。(http://www.51testing.com)
发表于 2018-02-06 11:34
51testing
阅读(191)
评论(0)
编辑
收藏
引用
只有注册用户
登录
后才能发表评论。