dram.me

开机启动程序中的PATH环境变量

在开发中已经遇到许多次因PATH引起的问题了。在随系统启动的程序中间接调用其它程序时,如果没有指定完整的路径,很可能会出现找不到程序的错误。如果程序写得不严谨,没有做错误检查,这个bug就会变得很隐蔽。

因为程序在开发调试时,是在当前工作的SHELL下执行程序的,此时的PATH一般会比较完整。而在随机启动时,有可能启动脚本没有指定PATH,这就导致开发环境与真实环境的不同。

在Linux中,如果PATH没有定义,默认只会去找/bin及/usr/bin下的程序。POSIX中也没有对此作明确规定。BSD又不相同,详见各系统的exec(3)。

而exec与system在执行程序时又不相同,sh在PATH没有定义时又是如何处理的?

综合考虑,除非有特殊需求,一般还是用全路径比较安全。