Ich habe ein paar Stunden beim Versuch, den VNC-Server (x0vncserver) auszuführen, verloren und der Client hat sich geweigert, eine Verbindung mit einer seltsamen Nachricht herzustellen
No password configured for VNC Auth
Der Server druckt auch diesen Fehler
SVncAuth: opening password file '~/.vnc/passwd' failed
Ok, ich habe viel Zeit verschwendet, bis mir klar wurde, dass die Tilde weder durch die Shell noch durch x0vncserver erweitert wurde. Dann habe ich diese Tests durchgeführt
$ echo --PasswordFile=~/.vnc/passwd
--PasswordFile=~/.vnc/passwd
Aber
$ echo PasswordFile=~/.vnc/passwd
PasswordFile=/home/tichomir/.vnc/passwd
Warum ist das so? Warum weigert sich die Shell, Tilde zu erweitern, wenn das Argument mit einem Bindestrich beginnt? Ich dachte, Tilde wird sich immer erweitern, solange es nicht zitiert wird, aber anscheinend kommt eine andere Regel ins Spiel?
Antworten:
Dies ist eine Besonderheit der
bash
in ihrem Handbuch beschriebenen Shell:Dies bedeutet , dass
bash
wird die Tilde in Ihrem erweiternPasswordFile=~/.vnc/passwd
Zeichenfolge, da es ein Argument istecho
wie eine variable Zuordnung , das aussieht.Die Zeichenfolge
--PasswordFile=~/.vnc/passwd
sieht nicht wie eine Variablenzuweisung aus, da die Zeichenfolge--PasswordFile
kein gültiger Variablenname ist.Beachten Sie, dass
bash
dies nicht tun , wenn in POSIX - Modus ausgeführt wird , und dass andere Muscheln, wiezsh
,ksh
oderyash
tut dies standardmäßig nicht tun (zsh
hat einemagicequalsubst
Option für Tilde - Erweiterung nach unquoted Gleichheitszeichen durchgeführt werden (=
) , obwohl).Wenn Sie sicherstellen möchten, dass der Pfad des Basisverzeichnisses des aktuellen Benutzers als Teil eines Arguments zu einem Befehl ordnungsgemäß erweitert wird, verwenden Sie den
$HOME
Wert anstelle der Tilde:Die „Erklärung Befehle oben aufgeführten“ bezeichnet in der Betriebsanleitung ist in Befehlen der eingebaut
alias
,declare
,typeset
,export
,readonly
, undlocal
.quelle
bash --posix -c '"export" a=~; printf "%s\n" "$a"'
Ausgänge~
.~
Erweiternalias a=~
ein POSIX-Konformitätsfehler ist (und nicht nützlich ist). Aber so hat es ksh88 gemacht (das hat sich in ksh93 geändert) und wahrscheinlich machen es auch bash, zsh und pdksh. Warumyash
das, was gegen die POSIX-Spezifikation geschrieben wurde, es nicht tut.=
zu einem Argument zusammenzuführen. Dann steht die Tilde-Erweiterung am Anfang eines Wortes und die Frage ist strittig.x0vncserver
,x0vncserver --PasswordFile file
funktioniert nicht, brauchen Sie--PasswordFile=file
.