GUI scriptin yani KGA tabanlı betik programlama bir çok konu da derde deva. Örneğin uzak bir sunucuya SSH ile bağlanıyor bir dizi işlem yapıp çıkıyorsunuz. Yada bir anonim ftp'ye bağlanıp bir çok işlem yapıp geri dönüyorsunuz. Bu işleri otomatik hale getirmek expect ile olabildiğince kolay.
#!/usr/bin/expect -f
spawn ftp $argv
expect "Name"
send "anonymous\r"
expect "Password:"
send "anonymous\r"
expect "ftp> "
send "ls\n"
interact
Bu programı aftp.exp olarak kaydedip çalıştırılabilir dosya yetkisi verelim.
pismikrop@minik:~/Desktop$ ./aftp.exp ftp.linux.org.tr
spawn ftp ftp.linux.org.tr
Connected to ftp.linux.org.tr.
220 ftp.linux.org.tr
Name (ftp.linux.org.tr:pismikrop): anonymous
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
drwxr-xr-x 5 1005 1006 1024 May 26 20:56 pub
226 Directory send OK.
ftp>
Şahsen SSH ile uzaktaki sistem yedeklerini almak için key-agent kullanmaktan çok daha akıllıca bir durum. Bir expect betiği ile SSH'a bağlanıp, istediğiniz dizinleri yedek alabilirsiniz. Daha sonra ssh'dan çıkıp sftp kanalı ile kendi sisteminize aktarabilirsiniz.
Böyle bir periodik işlem için Cron kullanmanıza da gerek yok. "fork" ile bir alt process oluşturup. sleep ile alt süreci istediğiniz kadar bekletebilirsiniz. Böylelikle tek bir program çalıştırarak günlük işlemlerinizi halletmiş olursunuz.
Bu kadar da değil:
set send_human {.1 .3 1 .05 2}
send -h "Çok açım yemeğe gidelim mi?\n"
Bu ifade yazışmalarınızda; karşınızda biri klavye kullanıyormuş havası vermeye yarar. expect komutu ile karşıdaki kişiden gelen yanıta göre sohbeti dallandırabilirsiniz.
Expect'in tcl ve python modülü de bulunmakta.
|