因为工作需要,需要在C写的代码里运行一些shell命令。有一点心得。
先假设有如下命令要执行
[[ $var =~ $var2 ]] && echo hit #如果$var中包含$var2的文本,则显示hit
首先, [[ ]]命令必须要bash运行,所以直接写
system("[[ $var =~ $var2 ]] && echo hit");是不行的,会报告错误并且运行失败。
需要以
bash -c "命令"
的方式运行。
如果我们是在控制台里执行,那么运行
bash -c "[[ $var =~ $var2 ]] && echo hit"
结果正确,但是如果我们写成
system("bash -c \"[[ $var =~ $var2 ]] && echo hit\"");
同样失败,因为$是转义符,需要写成
system("bash -c \"[[ \\$var =~ \\$var2 ]] && echo hit\"");
才能正确运行。同理,"`" 前面也需要加上\\才能正确识别和运行。
看到这里,肯定有读者会说:“我直接把命令写到脚本里,运行脚本就行了。”
可是总有些环境既没有写权限,又需要执行动态命令。此时上面的经验就有用了。