2016-05-13 73 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)時。