Expect

Expectje rozšíření skriptovacího jazykaTclurčené pro automatizaci práce s programy, které interaktivně používají rozhranípříkazového řádku. Expect vytvořil v roce1990Don Libesprounixovésystémy, ale od té doby byl přenesen i naMicrosoft Windowsa jiné systémy.
Expect se používá pro automatizaci řízení interaktivníchaplikací, jako jetelnet,FTP,passwd,fsck,rlogin,tip,SSHa dalších. Expect používápseudoterminályv Unixu nebo emulaci konzole ve Windows pro spuštění požadovaného programu, se kterým pak komunikuje pomocí terminálu nebo konzolového rozhraní podobně jako by to dělal člověk. Výsledkem může být úplná automatizace činnosti nebo například poskytnutígrafického uživatelského rozhraníuživateli (při použitíTk).
Expect disponuje mechanismemregulárních výrazůpro vyhledávání vzorků a obecnou programovou funkcionalitou, která umožňuje jednoduchým skriptům inteligentně řídit programy, které nemajíprogramovací jazyk,makranebo jiný mechanismus pro programování.
Expect slouží jako „lepidlo“ umožňující propojit dohromady existující programy, které nebyly navrženy, aby vzájemně spolupracovaly. Obecně je vhodné využít co nejvíce funkcionality existujících nástrojů, než řešit problémy v Expectu.
Důležitou doménou pro Expect jsou komerční softwarové produkty. Mnoho programů poskytuje ovládání pomocípříkazového řádku, ale často neumožňují psanískriptů. Byly navrženy, aby umožňovaly správu určitého zařízení, ale výrobce často nevynaložil dostatek prostředků na plnou implementaci robustního skriptovacího jazyka. Skript v Expectu může spustit shell, používat proměnné prostředí, provádět některé unixové příkazy pro načtení dalších informací a pak vstoupit do prostředípříkazového řádkuprogramu s nezbytnými informacemi pro dosážení záměru uživatele. Po shromáždění potřebných informací vpříkazovém řádkuprogramu může skript provést inteligentní rozhodnutí o tom, zda provést nějakou akci, a jak.
Pokaždé, když Expect dokončí operaci, jsou výsledky uloženy do lokální proměnné$expect_out. To skriptu umožňuje shromáždit informace potřebné pro uživatele, a zároveň rozhodnout o dalším chování skriptu.
Expect se často používá pro vytváření testů programů, utilit nebo vestavěných systémů. Příkladem testovacího nástroje napsaného v Expectu jeDejaGnu, který byl intenzivně používán pro testováníGCC, a je velmi vhodný i pro testování na vzdálených strojích například při vývoji vestavěných systémů.
Pro automatizaci vytváření expect skriptů lze použít nástroj nazývanýautoexpect, který sleduje činnost uživatele a pomocí heuristik vytváří skript v expectu. Přestože vygenerovaný kód může být rozsáhlý a hůře srozumitelný, lze se jím inspirovat nebo jej upravit na lepší kód.
Dalším příkladem je skript, který automatizuje FTP:
Následuje příklad, který ukazuje automatizaci použití SFTP (s heslem):
Předávání hesel jako pomocí parametrů příkazů použité v tomto příkladě, jebezpečnostní díra, protože jiní uživatelé na stejném počítači mohou heslo zjistit pomocí příkazups. Je však možné kód upravit, aby poslal heslo po vypsání výzvy:
Tento postup je bezpečnější, ale stále je problémem uložení nezašifrovaného hesla v textu skriptu.
Další příkladem je automatizované přihlášení uživatele na počítač pomocíssh:
Různé projekty implementují funkčnost podobnou Expectu v jiných jazycích –C#,Java,Scala,Groovy,Perl,Python,Ruby,ShellaGo. Obecně se nejedná o přesné klony původního Expectu, ale často se mu velmi podobají.
V tomto článku byl použitpřekladtextu z článkuExpectna anglické Wikipedii.