Bash komut dosyasında zaman aşımı bekleniyor


13

Aşağıdaki komut dosyasında "beklemek" için zaman aşımı nasıl eklerim? 120 saniye olarak ayarlamak istiyorum.

#!/bin/bash
HOST="localhost"
USER="myuname"
PASS="mypassword"

VAR=$(expect -c "
spawn ssh $USER@$HOST
expect \"password:\"
send \"$PASS\r\"
expect \"\\\\$\"
send \"ls\r\"
expect -re \"$USER.*\"
send \"logout\"
")

echo "==============="
echo "$VAR"

Yanıtlar:


13

Varsayılan zaman aşımı expect, kendi sayfasına göre 10 saniyedir. Daha önce 120 saniyeye değiştirmek spawn ssh $USER@$HOSTiçin satırı ekleyin

set timeout 120

bunu yapmak için

VAR=$(expect -c "
set timeout 120
spawn ssh $USER@$HOST
expect \"password:\"
send \"$PASS\r\"
expect \"\\\\$\"
send \"ls\r\"
expect -re \"$USER.*\"
send \"logout\"
")

2

Beklemek için adam sayfasının aşağıdaki özetine göre:

"bekle [[-opts] pat1 body1] ... [-opts] patn [bodyn]

kalıplardan biri ortaya çıkan bir işlemin çıktısıyla eşleşene, belirtilen bir süre geçinceye veya dosya sonu görünene kadar bekler. Nihai gövde boşsa, atlanabilir.

En son wait_before komutunun kalıpları, diğer kalıplardan önce örtülü olarak kullanılır. En son wait_after komutunun kalıpları, diğer kalıplardan sonra örtülü olarak kullanılır.

Tüm bekle deyiminin bağımsız değişkenleri birden fazla satır gerektiriyorsa, her satırı ters eğik çizgi ile sonlandırmaktan kaçınmak için tüm bağımsız değişkenler bir araya getirilebilir. Bu durumda, parantezlere rağmen olağan Tcl ikameleri meydana gelecektir.

Bir desen eof anahtar sözcüğüyse, karşılık gelen gövde dosya sonunda yürütülür. Bir model anahtar kelime zaman aşımı ise, karşılık gelen gövde zaman aşımı üzerine yürütülür. Hiçbir zaman aşımı anahtar sözcüğü kullanılmazsa, zaman aşımı sırasında örtük bir boş eylem yürütülür. Varsayılan zaman aşımı süresi 10 saniyedir, ancak "zaman aşımı 30'u ayarla" komutu ile örneğin 30 olarak ayarlanabilir. -1 değeri ile sonsuz bir zaman aşımı tanımlanabilir. Bir model varsayılan anahtar kelimeyse, karşılık gelen gövde zaman aşımı veya dosya sonu sırasında yürütülür.

Bir desen eşleşirse, ilgili gövde yürütülür. wait, gövdenin sonucunu (veya eşleşen bir desen yoksa boş dize) döndürür. Birden çok desenin eşleşmesi durumunda, ilk görünen desen bir gövde seçmek için kullanılır. ... "


1

@DerfK sorunuzu yanıtladı. Yine de betiğinizi bakım için yeniden düzenlerdim:

#!/bin/bash
export HOST="localhost"
export USER="myuname"
export PASS="mypassword"

script=<<'END_OF_SCRIPT'
    set timeout 120
    spawn ssh $env(USER)@$env(HOST)
    expect "password:"
    send "$env(PASS)\r"
    expect "\$"
    send "ls\r"
    expect -re "$env(USER).*"
    send "logout"
    expect eof
END_OF_SCRIPT

VAR=$(expect -c "$script")

echo "==============="
echo "$VAR"
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.