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 til sempre se expandirá, desde que não seja citado, mas aparentemente há outra regra que entra em jogo?
Respostas:
Essa é uma peculiaridade do
bash
shell descrito em seu manual:Isto significa que
bash
irá expandir o til em suaPasswordFile=~/.vnc/passwd
corda, uma vez que é um argumento paraecho
que se parece com uma atribuição de variável.A sequência
--PasswordFile=~/.vnc/passwd
não se parece com uma atribuição de variável, pois--PasswordFile
não é um nome de variável válido.Note-se que
bash
não faz isso quando executado no modo POSIX, e que outras conchas, comozsh
,ksh
ouyash
não fazem isso por padrão (zsh
tem umamagicequalsubst
opção para a expansão til a ser realizada após sinais de igual não cotados (=
) embora).Se você deseja 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" referida no manual são o construído em comandos
alias
,declare
,typeset
,export
,readonly
, elocal
.fonte
bash --posix -c '"export" a=~; printf "%s\n" "$a"'
saídas~
.~
expansãoalias a=~
seria um erro de conformidade do POSIX (e não é útil). Mas foi assim que o ksh88 fez (que mudou no ksh93) e provavelmente é por isso que o bash, o zsh e o pdksh também o fazem. Poryash
que o que foi escrito contra a especificação POSIX não faz isso?=
um argumento. Então a expansão do til está no início de uma palavra e a questão é discutível.x0vncserver
,x0vncserver --PasswordFile file
não funciona, você precisa--PasswordFile=file
.