标签:程序 同事 dash programName ubuntu bash
本地虚拟机我用ubuntu很嗨,但线上一般都是centos。
同事写了一个程序,输入格式是programName {A,B,C}
因为之前参数只有一个时,programName {A}会挂死,还非得programName {A,}
所以我打心里认为输入处理他自己完成的。
我这边的程序会调用同事的程序,在线上跑没出过问题。
在本地跑的时候,调用同事的程序,同事的程序挂死。
就把同事的程序当作黑盒吧。就只知道会挂死。调用同事程序时会打印参数,该参数正常。
但是同一个程序加相同参数在命令行执行没有问题,在程序里调用时,挂死。
就我在程序里执行命令行用system,或者execv,厉害的还用popen。execv当时有坑,因为需要自己设置argv,所以这个坑我大概见过。
当我脱离程序,关键语句另写了个c程序,在ubuntu上跑错误,在centos上跑正确,差不多这个问题就定位出来了。
ubuntu默认脚本执行程序dash,centos默认bash。
{A,B,C}参数列表并不由同事程序解析,而是脚本解释器解析。所以同事的程序就是黑盒。因为当时gdb打印argv[1]出来{A,B,C}而不是A时,我不懂,他应该懂。他忘了。
之后设置ubuntu默认脚本解释器为bash,问题解决。
我并没有仔细的去了解dash和bash,但ubuntu这样做的原因是,dash更快。
#include <stdio.h> #include <stdlib.h> int main() { char cmd[] = "programName {A,B,C}"; char buf[5000]; system(cmd); FILE *fp = popen(cmd, "r"); int ret; if (fp) { ret = fread(buf, 1, 4999, fp); pclose(fp); } printf("%s\n", buf); return 0; }
标签:程序,同事,dash,programName,ubuntu,bash 来源: https://www.cnblogs.com/toughcactus/p/15093525.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。