ファイルをscpしている間に/ tmpフォルダに特権がなく、実行中にsudo特権がない場合はタイムアウトを追加したいあなたはタイムアウトで何かをするだけではなく、記載されたパターンを待って停止したい場合は、「タイムアウト」のパターンを必要とするリモートサーバにファイルをscpしている間にタイムアウトを追加する方法とexpectスクリプトを使ってsudoする特権がない場合
spawn scp -o StrictHostKeyChecking=no \
/tmp/rem_script.sh $env(user_name)@$env(first_db_node_ip):/tmp
expect "password:"
send -- "$env(rem_password)\r"
expect eof
spawn ssh -o StrictHostKeyChecking=no $env(user_name)@$env(first_db_node_ip)
expect "password:"
send -- "$env(rem_password)\r"
expect -ex $
send "PS1=UGLY-PROMPT'# '\r"
expect "UGLY-PROMPT# "
send "sudo chmod 777 /tmp/rem_script.sh\r"
expect {
"password:" {
send -- "$env(rem_password)\r"
exp_continue
}
"UGLY-PROMPT# " {}
}
send "sudo sh /tmp/rem_script.sh $env(asrm_name) $env(com_str)\r"
expect {
"password:" {
send -- "$env(rem_password)\r"
exp_continue
}
-timeout 60 "UGLY-PROMPT# " {}
}
send "exit\r"
expect eof
こんにちはTim、あなたが追加したタイムアウトは、スクリプト全体を実行するのに効果的でしょうか?または、パスワードを期待する時間だけ?スクリプトは60秒以上かかる場合に起こります。その場合、間に終了しますか?私が間違っている場合に私を修正してください。 –
タイムアウトは、 "sudo sh"コマンドからの応答です。この場合、期待されるパターンが60秒以内に見られない場合、 "send_user"コマンドはテキストを "タイムアウト!"ユーザー出力に出力します。スクリプトを終了させたい場合は、exitコマンドをそのブロックに入れる必要があります。 グローバルタイムアウトブロックを作成する方法がわかりません。私はこれを行う必要がないと感じたことはありません。ドキュメントを見ているものは見つけられません。 –
私の間違いを訂正する編集された答えは次の答えで指摘されました。 –