如何用Shell写一个启动脚本

目录

1. 定位脚本路径和可执行程序的路径

2. 设置LD_LIBRARY_PATH 环境变量

3. 定位可执行文件路径及执行

4. 样例


通常情况下,我们在Linux下运行一个编译好的程序,只需要在可执行文件的路径下直接运行即可。但随着程序变得复杂,编译选项的增多,使用库的增加以及对可执行程序输入的参数变多,直接执行的过程变得比较麻烦。这时可以写一个启动的脚本来一键拉起程序。下面我们来看下如何用shell来创建一个拉起程序的脚本。

1. 定位脚本路径和可执行程序的路径

readonly SCRIPT_PATH=$(dirname $(readlink -f $0))
readonly PROJECT_PATH=${SCRIPT_PATH}

要执行程序,首先需要定位到可执行程序的路径,可以通过当前脚本文件的路径来方便定位。这里,dirname 表示获取后面变量的上一层路径,也就是$(readlink -f $0)代表的文件路径。readlink获取符号链接(获得文件名对应的路径),$0 表示当前的shell脚本文件名。有了这个路径,可以顺势定义一个PROJECT_PATH路径,方便后面找到可执行文件。因为一般我们会把启动脚本放到整个工程的某个路径下,一定和编译生成的可执行文件路径有一定的关系。

2. 设置LD_LIBRARY_PATH 环境变量

export LD_LIBRARY_PATH=${PROJECT_PATH}/lib/:$LD_LIBRARY_PATH

这一步也非常重要,通常如果直接执行,也需要进行这个步骤,否则会报找不到库的错误。这里注意LD_LIBRARY_PATH是系统定义的变量名称。对于查找库的顺序,可以再次复习一下:

如果没有设置 LD_LIBRARY_PATH 环境变量,操作系统会按照一定的默认搜索路径进行查找,默认搜索路径:通常包括 /lib、/usr/lib、/usr/local/lib 等。应用程序指定的依赖库路径:在编译应用程序时,通过指定 -rpath 参数设置动态链接库的路径。系统缓存文件:在运行时,操作系统会维护动态链接库的系统缓存文件,如 /etc/ld.so.cache。这个缓存文件中列出了系统内所有的动态链接库路径,操作系统会按照这个缓存文件中列出的顺序进行查找。

3. 定位可执行文件路径及执行

conduct_file=${PROJECT_PATH}/bin/"a.out"
${conduct_file}

通过之前定义的工程路径,找到可执行程序的位置,并进行执行。

4. 样例

由此,基本的启动脚本就完成了。下面汇总一下,命名为start.sh。增加了函数的写入和一些提示信息的模板,可以参考。

readonly SCRIPT_PATH=$(dirname $(readlink -f $0))
readonly PROJECT_PATH=${SCRIPT_PATH}

function start(){
    # 使用if增加逻辑上的判断
    if["test"=="$1"]; then
        echo "${SCRIPT_PATH} has one parameter"
    else
        echo "${SCRIPT_PATH} parameter is not one"
    fi

    export LD_LIBRARY_PATH=${PROJECT_PATH}/lib/:$LD_LIBRARY_PATH
    # 定位到可执行文件的路径
    conduct_file=${PROJECT_PATH}/bin/"a.out"
    # 执行可执行文件
    ${conduct_file}
}

function main(){
    # 主函数调用start函数
    start $@
}

main $@
 

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值