予測を使用したvncserver自動化は、期待どおりに機能しません。

予測を使用したvncserver自動化は、期待どおりに機能しません。

私はvncserverを初めて実行したときにパスワードを要求する部分を自動化しようとしました(passwdファイルを渡すフラグがあることを知っていますが、必要に応じて新しいファイルを作成することを好みます)。

#!/bin/bash

read -s PWD

/usr/bin/expect -d <<EOF
spawn /usr/bin/vncserver -geometry 1366x768 :1
expect "Password:"
send "$PWD\r"
expect "Verify:"
send "$PWD\r"
expect "Would you like to enter a view-only password"
send "n\r"
expect eof
EOF

ここでは-d、デバッグ出力を表示するためにフラグを使用しており、globが少なくとも2番目に予想されたものと部分的に一致するように見えます(一度失敗し、2回目の試行後に一致します)。

また、パスワードを送信するために使用することもできます(ここでは「isthisevenworking」というパスワードの例を使用します)、うまくいくようです。

vncserverが動作している場合でも通常の出力が表示されますが、実行中のプロセスを見るとvncserverが実行されていません...(フォルダpasswdにファイルがあるにもかかわらず.vnc

ただし、スクリプトの終了後に手動でvncを実行するか、次のようにスクリプトの最後に同じコマンドを追加すると、vncはサンプルパスワードとして機能します。

#!/bin/bash

read -s PWD

/usr/bin/expect -d <<EOF
spawn /usr/bin/vncserver -geometry 1366x768 :1
expect "Password:"
send "$PWD\r"
expect "Verify:"
send "$PWD\r"
expect "Would you like to enter a view-only password"
send "n\r"
expect eof
EOF
/usr/bin/vncserver -geometry 1366x768 :1

私が知りたいのは、vncserverコマンドが予想されるスクリプトの外で実行されているにもかかわらず、予想されるセクションの後になぜ実行されないのですか?

動作するのでスクリプトの最後に追加しても構いませんが、とにかく予想よりパスワードをたくさん設定した後に実行されるため、ちょっと不要な感じが...

編集:これが「予想」通りに機能しない理由がわかります。スクリプトが速く停止し始める前にvncserverが停止しているようです。次の手順を実行して、同じ操作を手動でシミュレートできます。

/usr/bin/vncserver -geometry 1366x768 :1

パスワードを2回入力し、+を入力してn実行しますCtrlD

だから私は無限のタイムアウトを追加しようとしました。

#!/bin/bash

read -s PWD

/usr/bin/expect -d <<EOF
set timeout -1
spawn /usr/bin/vncserver -geometry 1366x768 :1
expect "Password:"
send "$PWD\r"
expect "Verify:"
send "$PWD\r"
expect "Would you like to enter a view-only password"
send "n\r"
expect eof
EOF

しかし、まだ動作しません。最後の試みsleep

#!/bin/bash

read -s PWD

/usr/bin/expect -d <<EOF
spawn /usr/bin/vncserver -geometry 1366x768 :1
expect "Password:"
send "$PWD\r"
expect "Verify:"
send "$PWD\r"
expect "Would you like to enter a view-only password"
send "n\r"
sleep 10
expect eof
sleep 10
EOF

それは役に立たない...

ベストアンサー1

〜らしいこれ私の問題に関連する投稿です。だから私はそこに行き、2つの答え/アプローチを試しました。

#!/bin/bash

read -s PWD

/usr/bin/expect -d <<EOF
set timeout -1
spawn -ignore HUP /usr/bin/vncserver -geometry 1366x768 :1
expect "Password:"
send "$PWD\r"
expect "Verify:"
send "$PWD\r"
expect "Would you like to enter a view-only password"
send "n\r"
expect_background
expect eof
EOF

動作しませんが:

#!/bin/bash

read -s PWD

/usr/bin/expect -d <<EOF
set timeout -1
spawn screen bash
send "/usr/bin/vncserver -geometry 1366x768 :1\r"
expect "Password:"
send "$PWD\r"
expect "Verify:"
send "$PWD\r"
expect "Would you like to enter a view-only password"
send "n\r"
expect eof
EOF

すでに作業中です。

おすすめ記事