VNC 서버(x0vncserver)를 실행하려고 몇 시간을 허비했는데 클라이언트가 이상한 메시지와 함께 연결을 거부했습니다.
No password configured for VNC Auth
서버도 이 오류를 인쇄합니다.
SVncAuth: opening password file '~/.vnc/passwd' failed
글쎄, 나는 물결표가 쉘이나 x0vncserver에 의해 확장되지 않는다는 것을 깨달을 때까지 많은 시간을 낭비했습니다. 그런 다음 이 테스트를 실행했습니다.
$ echo --PasswordFile=~/.vnc/passwd
--PasswordFile=~/.vnc/passwd
하지만
$ echo PasswordFile=~/.vnc/passwd
PasswordFile=/home/tichomir/.vnc/passwd
왜 그런 겁니까? 인수가 대시로 시작하는 경우 쉘이 물결표 확장을 거부하는 이유는 무엇입니까? 물결표는 인용되지 않는 한 항상 확장될 것이라고 생각했는데, 분명히 또 다른 규칙이 있는 것 같은데요?
답변1
bash
이는 쉘 매뉴얼에 설명된 기능입니다.
단어가 간단한 명령에 대한 인수로 나타날 때 Bash는 변수 할당 조건을 충족하는 단어에 대해 물결표 확장도 수행합니다(위의 인수에서 설명한 대로). posix 모드에서 Bash는 위에 나열된 선언 명령을 제외하고는 이 작업을 수행하지 않습니다.
이것은 의미한다bash
~ 할 것이다물결표는 변수 할당처럼 보이는 매개변수 PasswordFile=~/.vnc/passwd
이므로 문자열에서 물결표를 확장하세요 .echo
문자열은 유효한 변수 이름이 아니기 --PasswordFile=~/.vnc/passwd
때문에 변수 할당처럼 보이지 않습니다 .--PasswordFile
POSIX 모드에서 실행할 때는 이 작업 을 수행하지 않으며, or 와 같은 다른 쉘에서는 bash
기본적으로 이 작업 zsh
을 수행하지 않습니다 (그러나 인용되지 않은 등호( ) 숫자 확장자 뒤에 물결표를 수행하는 옵션이 있습니다 ).ksh
yash
zsh
magicequalsubst
=
현재 사용자의 홈 디렉터리 경로가 명령 인수의 일부로 올바르게 확장되었는지 확인하려면 $HOME
물결표 대신 다음 값을 사용하세요.
echo --PasswordFile="$HOME/.vnc/passwd"
매뉴얼에 언급된 "위에 나열된 명령문 명령"은 내장 명령 alias
, declare
, typeset
, export
, readonly
및 입니다 local
.