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
왜 그런 겁니까? 인수가 대시로 시작하면 쉘이 물결표 확장을 거부하는 이유는 무엇입니까? 나는 인용되지 않은 한 항상 물결표가 확장 될 것이라고 생각했지만 분명히 다른 규칙이 적용됩니까?
답변
이것은 bash
매뉴얼에 설명 된 쉘 의 특성입니다 .
또한 Bash는 간단한 명령에 대한 인수로 표시 될 때 변수 지정 조건 (위에 설명 된 PARAMETERS)을 만족시키는 단어에 대해 물결표 확장을 수행합니다. posix 모드에있을 때 위에 나열된 선언 명령을 제외하고 Bash는이를 수행하지 않습니다.
이 수단 bash
것이다 당신의 물결을 확장 PasswordFile=~/.vnc/passwd
이의 인수 이후, 문자열 echo
변수 할당과 같은 그 모습이.
문자열 --PasswordFile=~/.vnc/passwd
이 --PasswordFile
유효한 변수 이름이 아니기 때문에 문자열 이 변수 할당처럼 보이지 않습니다 .
참고 bash
POSIX 모드에서 실행할 때이 작업을 수행하지 않으며, 다른 조개처럼 zsh
, ksh
또는 yash
기본적으로이 작업을 수행하지 않는다 ( zsh
있다 magicequalsubst
틸드 확장을위한 옵션이 인용되지 않은 등호 후 수행 할 ( =
)하지만).
현재 사용자의 홈 디렉토리 경로가 명령에 대한 인수의 일부로 올바르게 확장되도록 $HOME
하려면 물결표 대신 값을 사용하십시오 .
echo --PasswordFile="$HOME/.vnc/passwd"
은 “위에 나열된 선언 명령”이 매뉴얼은 명령에 내장되어 있습니다에 언급 alias
, declare
, typeset
, export
, readonly
,와 local
.