
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