在Linux下面用Shell命令很爽,有时编程时情不自禁就想popen或system一下,然后就接个shell命令行字符串,搞定
通过执行命令
getconf ARG_MAX
可以查看当前系统支持参数的长度
好了,现在就说一个问题
平时我们喜欢
rm -rf /mydir/
来递归删除mydir目录的文件
这里有个问题我们经常忽略,就是号会在执行的时候完全展开,即系统只会启用一个rm进程出来执行,后面就接这么一大坨的参数,所以如果参数非常多,直到超长,那么这个命令就会执行失败,系统此时会提示你
Argument list too long
这里有两个解决问题的思路:
1、如果那个真的是想把mydir删了,就直接用rm -rf /mydir/好了,这样不会有展开问题
2、如果要指定形如.tmp的文件的话,为了防止发生参数过长问题,最好使用
find /mydir/ -name “
.tmp” -exec rm -rf {} +这 样不会有问题,可以参考Linux文件查找命令find,xargs详述
其实我们平时应该尽可能少用popen之类的API来调用shell命令,虽然我知道这是很懒很方便的做法
最好还是用相应编程语言的API来实现,这样可以保证性能,也可以保证稳定性(内存不够时popen之类的东西会失败的)