2016-05-13 138 views
-1

我使用Ubuntu 14.04.4 LTS并安装了vnc4server。 启动vncdesktops的基本脚本位于/etc/init.d/vncserver这是一个bash脚本。这对于在/etc/vncserver/vncservers.conf中指定的所有用户都适用。但是,当用户使用csh而不是bash时,vncserver命令不起作用,因为vncserver脚本中存在语法错误。这个错误发生在我在这里展示的start()函数中。ubuntu下vncserver bash脚本错误14.04.4 LTS

start() { 
. /lib/lsb/init-functions 
REQ_USER=$2 
echo -n $"Starting $prog: " 
ulimit -S -c 0 >/dev/null 2>&1 
RETVAL=0 
for display in ${VNCSERVERS} 
do 
export USER="${display##*:}" 
if test -z "${REQ_USER}" -o "${REQ_USER}" == ${USER} ; then 
echo -n "${display} " 
unset BASH_ENV ENV 
DISP="${display%%:*}" 
export VNCUSERARGS="${VNCSERVERARGS[${DISP}]}" 
su ${USER} -c "cd ~${USER} && [ -f .vnc/passwd ] && vncserver :${DISP} ${VNCUSERARGS}" 
fi 
done 
} 

当我发出命令“须藤服务的vncserver重启”的vncserver的脚本运行,并给我这个错误使用csh用户。

Starting VNC server: 8:test1 [: No match. 

用户test1的'被使用csh和显示数为8。我可以看到这个错误是从线

su ${USER} -c "cd ~${USER} && [ -f .vnc/passwd ] && vncserver :${DISP} ${VNCUSERARGS}" 

快到了,我知道它在做什么,但我不知道为什么括号中的条件给了我这个错误,并且只对使用csh的用户。 任何人都可以给我一个线索吗?

+0

“cd〜$ {USER}”是否按照预期在csh中展开?您可能希望对此进行测试,因为'[-f .vnc/passwd]'正在查找$ {users-home-dir} /。vnc/passwd文件,并且找不到它。换言之,.vnc/passwd文件实际上是否存在于test1的主目录中? – Cwissy

+0

$ {USER}像我预期的那样扩展为test1,而.vnc/passwd存在于〜test1中。顺便说一句,脚本本身是一个bash脚本。 –

+0

我安装了tcsh并为csh创建了一个tcsh的链接,现在问题消失了。我不知道为什么.. –

回答

0

我不知道为什么,但我发现我的/ bin/csh链接如下。

/bin/csh -> /etc/alternatives/csh 

因此,我安装了tcsh(apt-get install tcsh)并将链接设置为这样。

/bin/csh -> /bin/tcsh 

然后问题就没有了! su命令和-c选项执行的命令正在su'ed用户的shell中处理,该shell是/ etc/alternatives/csh,可能无法处理[-f]条件。我猜想/ etc/alternatives/csh是一种默认的csh链接,当没有真正完整的csh(如tcsh)时。