如何在Ubuntu精确的X11之前在启动时加载环境variables?

使用Ubuntu Precise 64位,我遇到了一个我无法解决的问题,我将尝试描述如下:

我使用的是使用Go,NodeJS,Java和Scala的控制台模式程序(比如说abc)。

为了使abc能够使用这些语言,我必须声明以下语句:

a)在/ etc / environment中:

PATH = / usr / local / sbin:/ usr / local / bin:/ usr / sbin:/ usr / bin:/ sbin:/ bin:/ usr / local / go / bin CLASSPATH = $ CLASSPATH:/ usr / share /java/scala-library.jar

b)在/etc/login.defs中

ENV_SUPATH PATH = / usr / local / sbin:/ usr / local / bin:/ usr / sbin:/ usr / bin:/ sbin:/ bin:/ usr / local / go / bin

ENV_PATH PATH = / usr / local / sbin:/ usr / local / bin:/ usr / sbin:/ usr / bin:/ sbin:/ bin:/ usr / local / go / bin

c)a)在/ etc / sudoers中:

`#env_reset

默认值secure_path =“/ usr / local / sbin:/ usr / local / bin:/ usr / sbin:/ usr / bin:/ sbin:/ bin:/ usr / local / go / bin”

然后,当我从terminal启动abc时,一切正常,我可以使用上述4种语言中的任何一种。

但是,如果我在启动过程中启动abc的/etc/init.d中(即启动GUI之前)使用脚本,使用abc中的Java仍然没问题,但是使用Go,NodeJS或Scala不能运行。

然后,我想在启动过程中,在/ etc / sudoers,/ etc / environment和/etc/login.defs中设置的不同环境variables被加载之前,/etc/init.d中启动abc的脚本被执行。

所以,我的问题是:在启动abc的脚本启动之前,如何强制加载环境variables?

任何关于这个话题的帮助和build议都会受到赞赏。

TIA。 干杯。


再次感谢Mark和Danila。

下面是Danila修改后的“abc”脚本文件,放在/etc/init.d中


#!/bin/sh ##### EDIT: ADD THIS VARS DEFINITIONS: PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/go/bin" CLASSPATH=$CLASSPATH:/usr/share/java/scala-library.jar "ENV_SUPATH PATH"="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/go/bin" "ENV_PATH PATH"="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/go/bin" "Defaults secure_path"="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/go/bin" ##### EXPORT this VARS so they are accessible to children:" export "PATH" "CLASSPATH" "ENV_SUPATH PATH" "ENV_PATH PATH" "Defaults secure_path" ### BEGIN INIT INFO # Provides: abc # Required-Start: $remote_fs $syslog # Required-Stop: $remote_fs $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: abc initscript # Description: This initscript starts and stops abc ### END INIT INFO # Author: Fnux, fnux.fl at gmail dot com # Version: 1.2 # Note: (edit ABC_PATH if abc isn't installed in /opt/abc) NAME=abc ABC_PATH=/opt/abc START="-d" STOP="-k" VERSION="-v" SCRIPTNAME=/etc/init.d/$NAME STARTMESG="\nStarting abc in deamon mode." UPMESG="\n$NAME is running." DOWNMESG="\n$NAME is not running." STATUS=`pidof $NAME` # Exit if abc is not installed [ -x "$ABC_PATH/$NAME" ] || exit 0 case "$1" in start) echo $STARTMESG cd $ABC_PATH ./$NAME $START ;; stop) cd $ABC_PATH ./$NAME $STOP ;; status) if [ "$STATUS" > 0 ] ; then echo $UPMESG else echo $DOWNMESG fi ;; restart) cd $ABC_PATH ./$NAME $STOP echo $STARTMESG ./$NAME $START ;; version) cd $ABC_PATH ./$NAME $VERSION ;; *) echo "Usage: $SCRIPTNAME {start|status|restart|stop|version}" >&2 exit 3 ;; esac : 

现在,当执行这个脚本(即sudo服务abc start),我得到以下错误信息:

 fnux@fx8150-1204-3:~$ sudo service abc start /etc/init.d/abc: 4: /etc/init.d/abc: ENV_SUPATH PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/go/bin: not found /etc/init.d/abc: 5: /etc/init.d/abc: ENV_PATH PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/go/bin: not found /etc/init.d/abc: 6: /etc/init.d/abc: Defaults secure_path=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/go/bin: not found /etc/init.d/abc: 7: export: ENV_SUPATH PATH: bad variable name fnux@fx8150-1204-3:~$ 

那么,我错在哪里?

TIA的解释如何解决这个脚本。

干杯。 ;)

好的,我想我发现了这个问题:绝对不要使用双引号(“)。

所以,下面是正确的脚本:

 #!/bin/sh PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/go/bin" CLASSPATH=$CLASSPATH:/usr/share/java/scala-library.jar ENV_SUPATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/go/bin" ENV_PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/go/bin" export PATH CLASSPATH ENV_SUPATH ENV_PATH ### BEGIN INIT INFO # Provides: abc # Required-Start: $remote_fs $syslog # Required-Stop: $remote_fs $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: abc init script # Description: This init script starts and stops abc ### END INIT INFO # Author: Fnux, fnux.fl at gmail dot com # Version: 1.2 # Note: edit ABC_PATH if abc isn't installed in /opt/abc NAME=abc ABC_PATH=/opt/abc START="-d" STOP="-k" VERSION="-v" SCRIPTNAME=/etc/init.d/$NAME STARTMESG="\nStarting abc in deamon mode." UPMESG="\n$NAME is running." DOWNMESG="\n$NAME is not running." STATUS=`pidof $NAME` # Exit if abc is not installed [ -x "$ABC_PATH/$NAME" ] || exit 0 case "$1" in start) echo $STARTMESG cd $ABC_PATH ./$NAME $START ;; stop) cd $ABC_PATH ./$NAME $STOP ;; status) if [ "$STATUS" > 0 ] ; then echo $UPMESG else echo $DOWNMESG fi ;; restart) cd $ABC_PATH ./$NAME $STOP echo $STARTMESG ./$NAME $START ;; version) cd $ABC_PATH ./$NAME $VERSION ;; *) echo "Usage: $SCRIPTNAME {start|status|restart|stop|version}" >&2 exit 3 ;; esac : 

谢谢你的帮助。

希望这可以帮助别人。

干杯。 ;)