Я использую Ubuntu 14.04.4 LTS и установлен vnc4server. Основной скрипт, запускающий vncdesktops, находится в /etc/init.d/vncserver, который является скриптом bash. Это отлично подходит для всех пользователей, указанных в файле /etc/vncserver/vncservers.conf, с их аргументами. Но когда пользователь использует csh вместо bash, команда vncserver не работает из-за синтаксической ошибки в скрипте vncserver. Ошибка возникает в функции start(), которую я показываю здесь.Ошибка скрипта vncserver bash в ubuntu 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. Может ли кто-нибудь дать мне ключ?
"cd ~ $ {USER}" расширяется, как ожидалось, в csh? вы можете протестировать это, так как «[-f .vnc/passwd]» ищет файл $ {users-home-dir} /. vnc/passwd, и он не найден. Напротив, действительно ли файл .vnc/passwd существует в домашнем каталоге test1? – Cwissy
$ {USER} расширяется как test1, как я ожидаю, и .vnc/passwd существует в ~ test1. Кстати, сам скрипт является скриптом bash. –
Я установил tcsh и сделал ссылку на tcsh для csh, теперь проблема исчезла. Я не знаю, почему .. –