Apollo2.5开发笔记(3)dev_start.sh源码阅读

非常菜,非常小白,仅以此纪录,毫无参考意义……

首先从每次都要运行的脚本开始吧

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

 

你可能感兴趣的:(apollo)