ubuntu 14.04.4 LTS中的vncserver bash脚本错误

时间:2016-05-13 14:48:55

标签: linux bash ubuntu csh vnc-server

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

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
}

当我发出命令' sudo service vncserver restart' vncserver脚本运行并为使用csh的用户提供此错误。

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

用户' test1'正在使用csh,它的显示数字是8.我可以看到这个错误来自行

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

我理解它在做什么,但我不知道为什么括号条件会给我这个错误,而且仅限于使用csh的用户。 谁能给我一个线索?

1 个答案:

答案 0 :(得分: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)。