Perdi algumas horas tentando executar o servidor VNC (x0vncserver) e o cliente se recusou a se conectar com uma mensagem estranha que
No password configured for VNC Auth
O servidor também imprime este erro
SVncAuth: opening password file '~/.vnc/passwd' failed
Ok, perdi muito tempo até perceber que o til não era expandido pelo shell, nem pelo x0vncserver. Então eu fiz esses testes
$ echo --PasswordFile=~/.vnc/passwd
--PasswordFile=~/.vnc/passwd
Mas
$ echo PasswordFile=~/.vnc/passwd
PasswordFile=/home/tichomir/.vnc/passwd
Por que é que? Por que o shell se recusa a expandir o til se o argumento começa com um traço? Eu pensei que o til sempre se expandiria desde que não fosse citado, mas aparentemente há outra regra que entra em jogo?
Esta é uma peculiaridade do
bash
shell descrita em seu manual:Isso significa que
bash
expandirá o til em suaPasswordFile=~/.vnc/passwd
string, já que é um argumentoecho
que se parece com uma atribuição de variável.A string
--PasswordFile=~/.vnc/passwd
não se parece com uma atribuição de variável, pois a string--PasswordFile
não é um nome de variável válido.Observe que
bash
não faz isso ao executar no modo POSIX e que outros shells, comozsh
,ksh
ouyash
não fazem isso por padrão (zsh
tem umamagicequalsubst
opção para a expansão de til a ser executada após sinais de igual=
sem aspas ( )).Se você quiser garantir que o caminho do diretório inicial do usuário atual seja expandido corretamente como parte de um argumento para um comando, use o
$HOME
valor em vez do til:Os "comandos de declaração listados acima" mencionados no manual são os comandos internos
alias
,declare
,typeset
,export
,readonly
elocal
.