当前位置: 技术问答>linux和unix
求解答:linux开机自动运行脚本的诡异问题
来源: 互联网 发布时间:2016-12-14
本文导语: 那再改一下,重新描述。 由于新移植了tslib,想让系统开机自动设置tslib的相关环境变量,写了一个脚本: #vi setenv.sh export T_ROOT=/opt/tslib export TSLIB_CONSOLEDEVICE=none export TSLIB_FBDEVICE=/dev/fb export TSLIB_TSDEVICE=/dev/i...
那再改一下,重新描述。
由于新移植了tslib,想让系统开机自动设置tslib的相关环境变量,写了一个脚本:
#vi setenv.sh
export T_ROOT=/opt/tslib
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb
export TSLIB_TSDEVICE=/dev/input/event0
export TSLIB_PLUGINDIR=$T_ROOT/lib/ts
export TSLIB_CONFFILE=$T_ROOT/etc/ts.conf
export TSLIB_CALIBFILE=opt/tslib/pointercal
export LD_LIBRARY_PATH=$T_ROOT/lib:$LD_LIBRARY_PATH
并添加了可执行权限:
#chmod +x setenv.sh
经测试,执行source setenv.sh之后,环境变量生效。
# echo $T_ROOT
显示如下:
/opt/tslib
好了,诡异的现象开始了。
===============================================================================================
我将这段脚本写入/etc/init.d/rcS中,即在其最后添加下面红色的那一句。
#!/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
runlevel=S
prevlevel=N
umask 022
export PATH runlevel prevlevel
#
# Trap CTRL-C &c only in this shell so we can interrupt subprocesses.
#
/bin/mount -t proc none /proc
/bin/mount -t tmpfs none /tmp
/bin/mount -t tmpfs none /var
/bin/mkdir -p /var/log
/bin/hostname -F /etc/sysconfig/HOSTNAME
source /opt/setenv.sh
reboot之后,查看echo $T_ROOT,没有生效。
于是我试着将
export T_ROOT=/opt/tslib
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb
export TSLIB_TSDEVICE=/dev/input/event0
export TSLIB_PLUGINDIR=$T_ROOT/lib/ts
export TSLIB_CONFFILE=$T_ROOT/etc/ts.conf
export TSLIB_CALIBFILE=opt/tslib/pointercal
export LD_LIBRARY_PATH=$T_ROOT/lib:$LD_LIBRARY_PATH
直接加入到/etc/init.d/rcS中,如下所示:
#!/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
runlevel=S
prevlevel=N
umask 022
export PATH runlevel prevlevel
export T_ROOT=/opt/tslib
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb
export TSLIB_TSDEVICE=/dev/input/event0
export TSLIB_PLUGINDIR=$T_ROOT/lib/ts
export TSLIB_CONFFILE=$T_ROOT/etc/ts.conf
export TSLIB_CALIBFILE=opt/tslib/pointercal
export LD_LIBRARY_PATH=$T_ROOT/lib:$LD_LIBRARY_PATH
#
# Trap CTRL-C &c only in this shell so we can interrupt subprocesses.
#
/bin/mount -t proc none /proc
/bin/mount -t tmpfs none /tmp
/bin/mount -t tmpfs none /var
/bin/mkdir -p /var/log
/bin/hostname -F /etc/sysconfig/HOSTNAME
再重启,还是没有生效。什么原因呢?
为了表明上面的脚本是执行的了,我又在/etc/init.d/rcS中的最后面加入了一句测试语句。
./opt/test
其中,opt/test是我写的hello world测试程序。reboot之后,在终端上显示hello world,而环境变量依然没有设置。
有图有真相:
求解答啊。
由于新移植了tslib,想让系统开机自动设置tslib的相关环境变量,写了一个脚本:
#vi setenv.sh
export T_ROOT=/opt/tslib
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb
export TSLIB_TSDEVICE=/dev/input/event0
export TSLIB_PLUGINDIR=$T_ROOT/lib/ts
export TSLIB_CONFFILE=$T_ROOT/etc/ts.conf
export TSLIB_CALIBFILE=opt/tslib/pointercal
export LD_LIBRARY_PATH=$T_ROOT/lib:$LD_LIBRARY_PATH
并添加了可执行权限:
#chmod +x setenv.sh
经测试,执行source setenv.sh之后,环境变量生效。
# echo $T_ROOT
显示如下:
/opt/tslib
好了,诡异的现象开始了。
===============================================================================================
我将这段脚本写入/etc/init.d/rcS中,即在其最后添加下面红色的那一句。
#!/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
runlevel=S
prevlevel=N
umask 022
export PATH runlevel prevlevel
#
# Trap CTRL-C &c only in this shell so we can interrupt subprocesses.
#
/bin/mount -t proc none /proc
/bin/mount -t tmpfs none /tmp
/bin/mount -t tmpfs none /var
/bin/mkdir -p /var/log
/bin/hostname -F /etc/sysconfig/HOSTNAME
source /opt/setenv.sh
reboot之后,查看echo $T_ROOT,没有生效。
于是我试着将
export T_ROOT=/opt/tslib
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb
export TSLIB_TSDEVICE=/dev/input/event0
export TSLIB_PLUGINDIR=$T_ROOT/lib/ts
export TSLIB_CONFFILE=$T_ROOT/etc/ts.conf
export TSLIB_CALIBFILE=opt/tslib/pointercal
export LD_LIBRARY_PATH=$T_ROOT/lib:$LD_LIBRARY_PATH
直接加入到/etc/init.d/rcS中,如下所示:
#!/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
runlevel=S
prevlevel=N
umask 022
export PATH runlevel prevlevel
export T_ROOT=/opt/tslib
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb
export TSLIB_TSDEVICE=/dev/input/event0
export TSLIB_PLUGINDIR=$T_ROOT/lib/ts
export TSLIB_CONFFILE=$T_ROOT/etc/ts.conf
export TSLIB_CALIBFILE=opt/tslib/pointercal
export LD_LIBRARY_PATH=$T_ROOT/lib:$LD_LIBRARY_PATH
#
# Trap CTRL-C &c only in this shell so we can interrupt subprocesses.
#
/bin/mount -t proc none /proc
/bin/mount -t tmpfs none /tmp
/bin/mount -t tmpfs none /var
/bin/mkdir -p /var/log
/bin/hostname -F /etc/sysconfig/HOSTNAME
再重启,还是没有生效。什么原因呢?
为了表明上面的脚本是执行的了,我又在/etc/init.d/rcS中的最后面加入了一句测试语句。
./opt/test
其中,opt/test是我写的hello world测试程序。reboot之后,在终端上显示hello world,而环境变量依然没有设置。
有图有真相:
求解答啊。
|
把这些写在/etc/profile里试试
|
会不会rcS执行完了就结束了
新的登录过程不会继承这个环境变量
像ls说的,加入/etc/profile
新的登录过程不会继承这个环境变量
像ls说的,加入/etc/profile
|
/etc/profile 修改后,所有用户均被修改
建议修改/home/xx/.bashrc 文件,只针对某用户有效,而不影响其他用户的使用
建议修改/home/xx/.bashrc 文件,只针对某用户有效,而不影响其他用户的使用