linux下arm环境启动脚本/etc/init.d/rcS执行命令失败,踩坑记录

前言

记一次踩坑记录!!!

接触到一个新的系统,需要在这个系统上跑程序,测试的时候,手动执行脚本和程序都没问题,于是将执行命令写入到linux启动脚本/etc/init.d/rcS这个文件中,然后重启,等待程序起来,但是让我意想不到的是,执行到我加的命令的时候,居然报错,找不到相关的脚本,于是我再次手动执行,发现能正常运行,这就让我奇怪,一开始还以为是系统还没完全起来,于是加了延时,可还是不行,检查了一下脚本的权限,都是没问题的,查了很久,才发现是环境变量的原因。

问题复现

首先我们在这个/opt/bin/这个路径下创建一个脚本test.sh,输入一下内容

#!/bin/sh

echo "hello world"

然后赋权限

然后切到根目录,直接执行脚本,可以执行

为什么可以执行呢,因为环境变量有这个路径,所以可以直接执行

linux下arm环境启动脚本/etc/init.d/rcS执行命令失败,踩坑记录_第1张图片

接着我们在/etc/init.d/rcS中添加命令执行这个脚本

linux下arm环境启动脚本/etc/init.d/rcS执行命令失败,踩坑记录_第2张图片

然后重启,等待脚本执行

linux下arm环境启动脚本/etc/init.d/rcS执行命令失败,踩坑记录_第3张图片

结果找不到这个脚本,但是这个时候手动执行又没问题

问题分析

后面查了一下,发现/etc/init.d/rcS这个脚本的环境变量和我们登录终端的环境变量是不一样的,手动执行可以成功前面也说了,是因为有环境变量,那为什么登录终端会有环境变量呢?

这个是因为在 Linux 终端登录时,初始的环境变量通常是由 /etc/profile~/.bash_profile(或 ~/.bash_login~/.profile)文件中的配置所决定的。

其中,/etc/profile 文件是系统级别的配置文件,它会在所有用户登录时执行,并设置全局的环境变量。而 ~/.bash_profile(或 ~/.bash_login~/.profile)文件是用户级别的配置文件,它会在用户登录时执行,并设置用户级别的环境变量。

linux下arm环境启动脚本/etc/init.d/rcS执行命令失败,踩坑记录_第4张图片

可以看到,/etc/profile这个文件里已经把/opt/bin这个路径添加到了环境变量,所以可以成功执行

所以同样的,如果想要/etc/init.d/rcS这个文件中也成功执行脚本,那也要添加环境变量

linux下arm环境启动脚本/etc/init.d/rcS执行命令失败,踩坑记录_第5张图片

再次重启,成功执行

linux下arm环境启动脚本/etc/init.d/rcS执行命令失败,踩坑记录_第6张图片

总结

其实这个问题的原因并不复杂,环境变量这个东西对我来书并不陌生,只是对linux环境的一个机制并不熟悉,才会踩坑,不过通过这次的经历,对linux环境有了更进一步的熟悉,吃一堑长一智,linux的学习任重道远,想要成为一名合格的linux嵌入式工程师,还是得继续专研。

你可能感兴趣的:(linux,arm开发,嵌入式硬件)