2017-01-06 47 views
0

我碰壁了,试图理解为什么${name}_chdir变量不适合我。最后,让我的脚本运行与-xv后,我看到cd命令甚至没有运行在我的情况。这里是我的脚本:为什么这个rc.d脚本不会发生chdir?

#!/bin/sh 
set -xv 
exec 1>/tmp/awning.rclog 2>&1 

# REQUIRE: NETWORKING LOGIN DAEMON 
# KEYWORD: shutdown 

. /etc/rc.subr 

name="awning" 
rcvar="awning_enable" 
awning_chdir="/usr/sbin/awning" 

pidfile="/var/run/awningd.pid" 
procname="daemon" 

# -f flag is to redirect stdin/stdout/stderr to /dev/null to prevent node from crashing 
# on system-startup 
start_cmd="/usr/sbin/daemon -r -P ${pidfile} -f -u pierre /usr/sbin/awning/intro.js" 
command="/usr/sbin/daemon -r -P ${pidfile} -f -u pierre /usr/sbin/awning/intro.js" 
load_rc_config $name 
run_rc_command "$1" 

起初我只用start_cmd,但后来我在rc.subr阅读以下内容:

$ {名} _chdir

 Directory to cd to before running _command_, if 
     ${name}_chroot is not provided. 

所以我想也许事情变得混乱起来,所以我加了command=....位,并删除了start_cmd=....一行,但仍然没有成功秒。以下是有关“DOIT”输出产品,其从-xv运行脚本保存的部分:

+ _chdir=/usr/sbin/awning _chroot='' _nice='' _user='' _group='' _groups='' _fib='' _env='' _prepend='' _login_class=daemon _oomprotect='' 
+ [ -n '' ] 
+ [ -z yes ] 
+ [ start '!=' start ] 
+ [ -n awning_enable -a start '!=' rcvar -a start '!=' stop -a start '!=' describe ] 
+ checkyesno awning_enable 
+ eval '_value=$awning_enable' 
+ _value=YES 
+ debug 'checkyesno: awning_enable is set to YES.' 
+ return 0 
+ [ start '=' start -a -z yes -a -n '' ] 
+ eval '_cmd=$start_cmd' '_precmd=$start_precmd' '_postcmd=$start_postcmd' 
+ _cmd='/usr/sbin/daemon -r -P /var/run/awningd.pid -f -u pierre /usr/sbin/awning/intro.js' _precmd='' _postcmd='' 
+ [ -n '/usr/sbin/daemon -r -P /var/run/awningd.pid -f -u pierre /usr/sbin/awning/intro.js' ] 
+ _run_rc_precmd 
+ check_required_before start 
+ local _f 
+ return 0 
+ [ -n '' ] 
+ check_required_after start 
+ local _f _args 
+ return 0 
+ return 0 
+ _run_rc_doit '/usr/sbin/daemon -r -P /var/run/awningd.pid -f -u pierre /usr/sbin/awning/intro.js ' 
+ debug 'run_rc_command: doit: /usr/sbin/daemon -r -P /var/run/awningd.pid -f -u pierre /usr/sbin/awning/intro.js ' 
+ eval '/usr/sbin/daemon -r -P /var/run/awningd.pid -f -u pierre /usr/sbin/awning/intro.js ' 
+ /usr/sbin/daemon -r -P /var/run/awningd.pid -f -u pierre /usr/sbin/awning/intro.js 
+ _return=0 
+ [ 0 -ne 0 ] 
+ return 0 
+ _run_rc_postcmd 
+ [ -n '' ] 
+ return 0 
+ return 0 

_chdir被正确设定,但它从来没有使用任何东西。老实说,它看起来像这些变量(_chdir_chroot等),实际上应该是awning_chdirawning_chroot,等...

可能是什么回事?

我运行11.0版本-RELEASE-P2

回答

0

通过/etc/rc.subr中步进后,我学会(艰难地)那命令=需要从字面上是一个命令。有一个测试在它上面([ ! -x $command ]),即使对于带有选项和没有参数的命令也会失败。我不得不拆分我正在将daemon及其单个参数/usr/sbin/awning/intro.js传递给一个单独变量的选项:command_args =,这解决了问题。