2016-05-13 4 views
-1

Я использую 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. Может ли кто-нибудь дать мне ключ?

+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 и сделал ссылку на tcsh для csh, теперь проблема исчезла. Я не знаю, почему .. –

ответ

0

Я не знаю точно, почему, но я обнаружил, что мой/bin/csh был связан, как показано ниже.

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

Так я установил Tcsh (APT-получить установку Tcsh) и сделал ссылку, как это.

/bin/csh -> /bin/tcsh 

Тогда проблема исчезла! Команда su и команда, выполняемая параметром -c, обрабатываются в оболочке su'ed пользователя, которая была/etc/alternatives/csh, которая, вероятно, не могла обработать условие [-f]. и я считаю, что/etc/alternatives/csh - это своего рода дефолтный csh, связанный с отсутствием реального полноценного csh (например, tcsh).

Смежные вопросы