欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Apollo2.5源码阅读(1)

程序员文章站 2022-07-12 11:55:07
...

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

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

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