Apollo2.5源码阅读(1)
非常菜,非常小白,仅以此纪录,毫无参考意义……
首先从每次都要运行的脚本开始吧
dev_start.sh
#!/usr/bin/env bash
这是在linux的脚本文件第一行,指定脚本解释器为bash,用/usr/bin/env的目的是为了在不同的系统使用时,都去用户PATH变量定义的目录里寻找bash来执行,如果路径写死可能会找不到脚本解释器。
整个文件里有几个函数:
function check_agreement()
function show_usage()
function stop_containers()
一堆shell程序
function local_volumes()
function main()
shell是Linux的核心程序kernel和用户之间的接口,这里的shell程序是Bourne Again Shell(bash的全称,Bourne为了纪念shell鼻祖Stephen Bourne,当代Unix Shell程序/bin/sh的创造者)。
APOLLO_ROOT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )/../.." && pwd )"
$变量名,这里会被变量的值替代,${BASH_SOURCE[0]}是当前bash文件路径
dirname提取参数中的目录,即不包含当前bash文件名的路径
cd .. ..后退两级
pwd打印当前工作目录
运行这一句结果大概就是APOLLO_ROOT_DIR这个变量被赋值成apollo文件夹被放置的地方,然后这个值被打出来了……
if [ ! -e /apollo ]; then
sudo ln -sf ${APOLLO_ROOT_DIR} /apollo
fi
-e是指如果文件存在则为真
-s:进行软链结(symboliclink)
-f: 链结时先将与dist同档名的档案删除
上面是说,如果/apollo不存在则生成软链接/apollo指向apollo文件夹被放置的地方,就很像生成快捷方式
if [ -e /proc/sys/kernel ]; then
echo "/apollo/data/core/core_%e.%p" | sudo tee /proc/sys/kernel/core_pattern > /dev/null
fi
如果/proc/sys/kernel存在,就echo,/proc/sys/kernel 为管理者以及用户提供查看和配置系统核心参数的窗口,core_pattern设置core文件保存位置或文件名,core文件其实就是内存的映像,当程序崩溃时,存储内存的相应信息,主用用于对程序进行调试。(所以/apollo/data/core下面都是程序崩溃时候存的信息,经常变得很大,导致工控机没内存了)
%e - 在文件名里插入命令名
%p - 在文件名里插入pid
|表示前面的输出丢给后面做输入
tee是把输出内容打印到屏幕的同时存成文件,存到/proc/sys/kernel/core_pattern里
>表示重定向,/dev/null是各空设备,重定向给它就是丢弃了,不输出到终端
同时用tee又重定向就是单纯存到文件里不打印到终端吧……
总的来所,这段话意思是,如果/proc/sys/kernel存在,就设定/apollo/data/core下存的文件名字格式是core_命令名.pid,内容是程序崩溃时候内存映像。
source ${APOLLO_ROOT_DIR}/scripts/apollo_base.sh
执行这个脚本文件里的命令
check_agreement
执行前面写的函数,检查用户是否同意许可协议
……看不下去了,我看这个脚本文件干嘛呢orz