私はbashスクリプトでhere-documentsを使用してパスワードを必要とするいくつかのインストールと設定を自動化しています。パスワードを一度入力すると、スクリプトはそれをさまざまなコマンドに渡します。ほとんどの場合、ここでの文書化アプローチはこの問題をうまく処理します。ただし、場合によっては、次のエラーが発生します。
Enter VNC password: stty: standard input: Inappropriate ioctl for device
Verify password:
stty: standard input: Inappropriate ioctl for device
このエラーメッセージは、からのものでx11vnc -storepassword
はなくからのものですsudo
。
私の問題は以下に関連していますx11vnc -storepasswd
。これが私のコードです。
sudo x11vnc -storepasswd ~/.vnc/passwd << ENDDOC
password
password
y
ENDDOC
明らかに(エラーと判断した場合)これは機能しません。私はsudo x11vnc -storepasswd ~/.vnc/passwd
これをスクリプトで実装する方法の実際の例をしたいと思います。
役に立つなら、ヒントは次のとおりです。
VNCパスワード入力:
パスワード確認:
/home/user/.vnc/passwdにパスワードを書きますか? [y]/nn
使用する方がexpect
良いソリューションですか?では、この場合はどのように使用すればよいでしょうか? (これまで使ったことはありませんが、expect
この質問を投稿してから多くの例を見ましたが、expect
自分で動作させることはできません。)
ベストアンサー1
x11vnc
これらの警告メッセージを防ぐもう1つのオプションは、UNIXコマンドで生成された疑似端末で実行することです(参照:擬似端末(pty)を使用した対話型プログラムの制御)。これは、(「対話型プログラムを使用した会話プログラミング」)script
などのコマンドまたはツールを介して実行できます。pdip
Mac OS X 10.6.8では、疑似端末に関する警告メッセージは使用できませんx11vnc
。
# x11vnc 0.9.14
sudo x11vnc -storepasswd ~/.vnc/passwd << ENDDOC
password
password
y
ENDDOC
# Enter VNC password: stty: stdin isn't a terminal
#
# Verify password:
# stty: stdin isn't a terminal
# Write password to ~/.vnc/passwd? [y]/n Password written to: ~/.vnc/passwd
次のコマンドを使用して解決しますscript
。
# GNU script command
sudo script -q -c 'x11vnc -storepasswd ~/.vnc/passwd' <<ENDDOC /dev/null
password
password
y
ENDDOC
# ... or ...
printf '%s\n' 'password' 'password' 'y' |
sudo script -q -c 'x11vnc -storepasswd ~/.vnc/passwd' /dev/null
# FreeBSD script command
sudo script -q /dev/null x11vnc -storepasswd ~/.vnc/passwd <<ENDDOC
password
password
y
ENDDOC