我使用 /etc/init.d/httpd 作为 init.d 脚本的模板。我了解文件中发生的所有内容,但以下行除外:
LANG=$HTTPD_LANG daemon --pidfile=${pidfile} $httpd $OPTIONS
有人可以解释为什么 HTTPD_LANG(设置为“C”)应该在守护程序函数之前存在吗?谢谢。
当您在执行命令之前立即分配环境变量时,该变量会有效地导出到命令的环境中,但不会影响父环境。来自 man bash:
任何简单命令或函数的环境都可以通过在其前面加上参数分配来临时扩充,如上文 PARAMETERS 中所述。这些赋值语句只影响该命令看到的环境。
因此,在这个 initscript 中发生的事情是LANG
,设置为您配置HTTPD_LANG
的任何内容(在本例中为“C”)的变量正在导出到daemon
命令的环境中(并且可能从那里导出到 httpd 的环境中)。
任何不会看到用户交互的东西只会被“适当的本地化”减慢。根据 Barry Kauler 的测试,设置 LANG="C" 最多可以提高 5 倍的速度。
您可以通过将 LANG 变量保存到临时变量、使用 LANG=C 运行关键程序然后恢复 LANG 来获得相同的加速