bashスクリプトエラーstty:stdin:デバイスに不適切なioctl

bashスクリプトエラーstty:stdin:デバイスに不適切なioctl

私は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

おすすめ記事