前言
记一次踩坑记录!!!
接触到一个新的系统,需要在这个系统上跑程序,测试的时候,手动执行脚本和程序都没问题,于是将执行命令写入到linux启动脚本/etc/init.d/rcS这个文件中,然后重启,等待程序起来,但是让我意想不到的是,执行到我加的命令的时候,居然报错,找不到相关的脚本,于是我再次手动执行,发现能正常运行,这就让我奇怪,一开始还以为是系统还没完全起来,于是加了延时,可还是不行,检查了一下脚本的权限,都是没问题的,查了很久,才发现是环境变量的原因。
问题复现
首先我们在这个/opt/bin/这个路径下创建一个脚本test.sh,输入一下内容
#!/bin/sh
echo "hello world"
然后赋权限
然后切到根目录,直接执行脚本,可以执行
为什么可以执行呢,因为环境变量有这个路径,所以可以直接执行
接着我们在/etc/init.d/rcS中添加命令执行这个脚本
然后重启,等待脚本执行
结果找不到这个脚本,但是这个时候手动执行又没问题
问题分析
后面查了一下,发现/etc/init.d/rcS这个脚本的环境变量和我们登录终端的环境变量是不一样的,手动执行可以成功前面也说了,是因为有环境变量,那为什么登录终端会有环境变量呢?
这个是因为在 Linux 终端登录时,初始的环境变量通常是由 /etc/profile
和 ~/.bash_profile
(或 ~/.bash_login
或 ~/.profile
)文件中的配置所决定的。
其中,/etc/profile
文件是系统级别的配置文件,它会在所有用户登录时执行,并设置全局的环境变量。而 ~/.bash_profile
(或 ~/.bash_login
或 ~/.profile
)文件是用户级别的配置文件,它会在用户登录时执行,并设置用户级别的环境变量。
可以看到,/etc/profile这个文件里已经把/opt/bin这个路径添加到了环境变量,所以可以成功执行
所以同样的,如果想要/etc/init.d/rcS这个文件中也成功执行脚本,那也要添加环境变量
再次重启,成功执行
文章来源:https://www.toymoban.com/news/detail-810493.html
总结
其实这个问题的原因并不复杂,环境变量这个东西对我来书并不陌生,只是对linux环境的一个机制并不熟悉,才会踩坑,不过通过这次的经历,对linux环境有了更进一步的熟悉,吃一堑长一智,linux的学习任重道远,想要成为一名合格的linux嵌入式工程师,还是得继续专研。文章来源地址https://www.toymoban.com/news/detail-810493.html
到了这里,关于linux下arm环境启动脚本/etc/init.d/rcS执行命令失败,踩坑记录的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!