linux的/etc/rc.d/rc.local与$HOME/.bashrc启动先后问题 50

最近需要一个脚本,在系统开机或重启后,在root用户第一次登入shell时,把指定的脚本运行结果在terminal中show出来。我是这么做的~在$HOME/.bash_... 最近需要一个脚本,在系统开机或重启后,在root用户第一次登入shell时,把指定的脚本运行结果在terminal中show出来。我是这么做的~
在$HOME/.bash_profile中,加入/usr/bin/gnome-terminal &
在$HOME/.bashrc中,加入如下代码
if [ $(awk '{print $1}' /root/flag.txt) -eq 1 ]; then
sh /root/test.sh
echo "0" > /root/flag.txt
在/etc/rc.d/rc.local中,加入一句
echo "1" > /root/flag.txt
按我的想法,启动后,系统初始化时,会将flag文件中的数字设为1,表示需要运行test.sh文件。进入shell后,~/.bashrc会去判断flag的值,如果为1,就显示脚本的运行结局,如果运行了这个脚本,就将flag文件中的数设定为0,表示不需要运行脚本。这样的目的是避免以后每次打开terminal时,因为shell会导入~/.bashrc文件,导致一打开terminal就自动执行脚本。。
但实际运行发现,每次重启后,flag始终为0.。。注释掉echo "0" > /root/flag.txt,就没事了。。但会导致每次打开terminal,就自动执行脚本。。。
展开
 我来答
jiangtao9999
2013-11-10 · TA获得超过1.2万个赞
知道大有可为答主
回答量:1.2万
采纳率:44%
帮助的人:8382万
展开全部
印象里有这么一个问题,就是 bash 如果被用来运行脚本,会先去执行当前用的 .bashrc 。这就导致你这种情况,因为开机时所有的 shell 脚本都是用 root 来运行的。
也就是你遇到的问题。

好像 ~/.bash_login 不会这样吧?没印象了。我只是印象里,如果在登陆时运行的指令,是有个专用的地方可以放而不是扔到 bashrc 里。
不过你这直接 root 敢死队,确实容易出状况啊……如果换个一般用户来弄这个就没问题了。
追问
并不是所有的linux都有bash_login.
我知道了原因,是因为当前root登入时,会取得它的shell,会去执行/bashrc,这里就先把flag置为0了,但奇怪的是/bash_profile居然要比bashrc后执行
追答
bash_login 不是看系统有没有。这个是 bash 自己读取的事情。bash 自己会去读取很多配置文件的,好象有 7、8 个呢吧,这个文件没有的话,他就会跳过继续读取后面的配置文件。
我记得 bashrc 就是最先执行,之后才是 profile 。
欲世柴野涂画堡26
2013-11-11
知道答主
回答量:5
采纳率:0%
帮助的人:3万
展开全部
echo "0" >> /root/flag.txt这样更方便些吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式