程序员们的内心都有这样的逻辑
if (我的程序.功能 == 你的程序.功能):
if(我的程序.代码行数 < 你的程序.代码行数):
assertTrue(我的程序.牛逼程度 > 你的程序.牛逼程度 )
牛逼程度决定了程序员的境界,是程序员的生存之本,所以程序员一般会殚精竭虑,舍生忘死的减少代码行数。本文就讲述了这么一个小故事。
近日来,家住北京市朝阳区的程序员诸葛建国非常忙碌,他开发了一套产品,唤做JDT,需要部署到客户的linux服务器上。JDT完美无缺,就是有个小瑕疵——需要设置一个环境变量才能工作!!!所以他不得不在JDT的安装脚本中,增加一个设置环境变量的功能。
设置一个环境变量还不容易?直接在安装脚本中写
echo "export bar=foo" >> /etc/profile
注意要用>>,否则原来内容就没喽。
写完之后发现一个问题,JDT总是不能一蹴而就、一泻千里的安装成功,所以经常需要重新运行安装脚本。这样安装完之后,/etc/profile文件末尾就有好几个“bar=foo”。作为一个有洁癖的程序员,诸葛建国当然不能容忍啦,赶紧加班加点改了安装脚本。
if grep "export bar=foo" /etc/profile > /dev/null
then
echo "will do nothing"
else
echo "will do something"
echo "export bar=foo" >> /etc/profile
fi
这里grep命令可以直接接到if后面,grep的返回值直接作为判断条件。
诸葛建国正在为这个技巧洋洋得意,夏侯富贵出现在了他身边,告诉他:“用/etc/profile.d文件夹”
所以现在用
echo "export bar=foo" > /etc/profile.d/jdt.sh
就行了,想运行几次就运行几次!!!
诸葛建国后来发现,linux好多配置都有这种插件式的表现形式,比如/etc/lograte.d/,/etc/cron.daily/,/etc/security/limits.d/,它们有个主要的配置文件,然后有一大堆插件式的配置文件。
这种方式的好处是插件的配置不用再参差不齐、鱼龙混杂的放在一起了。而且主程序的升级更方便了,比如系统上安装了一个nginx,你修改了/etc/nginx/nginx.conf,增加了一些目录映射,然后用yum更新了一下nginx,这时nginx安装程序就会很崩溃,到底是用新版本的配置文件还是系统中现有的配置文件?
把nginx的配置放到/etc/nginx/conf.d/文件夹就方便多了,nginx升级程序大刀阔斧歇斯底里的覆盖原有配置文件/etc/nginx/nginx.conf就行了。