2016-05-13 5 views
-1

Ich benutze Ubuntu 14.04.4 LTS und installiert vnc4server. Das grundlegende Skript, das vncdesktops startet, befindet sich unter /etc/init.d/vncserver, was ein Bash-Skript ist. Dies funktioniert für alle Benutzer, die in /etc/vncserver/vncservers.conf mit ihren Argumenten angegeben sind. Wenn ein Benutzer jedoch csh anstelle von bash verwendet, funktioniert der vncserver-Befehl aufgrund eines Syntaxfehlers im vncserver-Skript nicht. Der Fehler tritt in der Funktion start() auf, die ich hier zeige.vncserver bash script fehler in 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 
} 

Wenn ich den Befehl ‚sudo Service vncserver Neustart‘, um die Skript vncserver läuft und geben Sie mir diesen Fehler für einen Benutzer mit csh geben.

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

Benutzer ‚test1‘ wird unter Verwendung von csh und seine Anzeige Nummer 8 kann ich diesen Fehler sehen von der Leitung kommenden

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

und ich verstehe, was es tut, aber ich weiß nicht, Warum gibt mir die Bracket-Bedingung diesen Fehler und das nur für einen Benutzer, der csh verwendet. Kann mir jemand einen Hinweis geben?

+0

erweitert sich "cd ~ $ {USER}" wie erwartet in csh? Vielleicht möchten Sie dies testen, da die '[-f .vnc/passwd]' nach der Datei $ {users-home-dir} /. vnc/passwd sucht und nicht gefunden wird. Konversiert die .vnc/passwd-Datei tatsächlich im Home-Verzeichnis von test1? – Cwissy

+0

$ {USER} wird wie erwartet erweitert und .vnc/passwd existiert in ~ test1. Übrigens ist das Skript selbst ein Bash-Skript. –

+0

Ich installierte tcsh und machte einen Link zu tcsh für csh, jetzt ist das Problem weg. Ich weiß nicht warum ... –

Antwort

0

Ich weiß nicht genau, warum, aber ich fand mein/bin/csh wurde wie folgt verknüpft.

Also habe ich tcsh (apt-get install tcsh) installiert und den Link so gemacht.

/bin/csh -> /bin/tcsh 

Dann ist das Problem weg! Der Befehl su und der Befehl, der von der Option -c ausgeführt wird, werden in der Shell des Benutzers 'sueded' verarbeitet, die/etc/alternatives/csh ist, die wahrscheinlich die Bedingung [-f] nicht verarbeiten konnte. und ich gues die/etc/alternatives/csh ist eine Art von Standard-Csh verknüpft mit, wenn es keine echte voll flügge csh (wie tcsh).