概述
`expect` 透過等待預定義的模式(例如提示字串)然後發送特定字串(例如使用者輸入)來自動化互動式會話。這使您能夠在無需手動干預的情況下執行複雜的任務。
主要特點
- 基於 Tcl 的腳本語言擴展
- 自動化與互動式程式(例如 ssh、ftp、telnet)的互動
- 提示字串模式匹配和響應發送功能
- 適用於自動化重複性和手動任務
主要選項
這些選項控制 `expect` 命令本身的執行方式。它們與腳本內部使用的 `expect` 和 `send` 命令不同。
執行控制和調試
生成的命令:
請試著組合命令。
這個 Django 應用程序是一個技術指南文檔,旨在為用戶輕鬆解釋 Linux 的各種命令。
`expect` 執行命令。
請將上述選項組合在一起,與 AI 一同虛擬執行命令。
安裝
`expect` 通常不包含在大多數 Linux 發行版中,因此您需要透過套件管理器進行安裝。
Debian/Ubuntu
sudo apt update && sudo apt install expect
使用 APT 套件管理器安裝 `expect`。
RHEL/CentOS/Fedora
sudo dnf install expect
使用 DNF(或 Yum)套件管理器安裝 `expect`。
使用範例
`expect` 腳本通常具有 `.exp` 副檔名,並以 `#!/usr/bin/expect` 開頭,以便由 `expect` 解譯器執行。
簡單的提示自動回應
#!/usr/bin/expect
set timeout 10
spawn sh -c "echo -n 'Proceed? (y/n) '
read response"
expect "Proceed? (y/n) "
send "y\r"
expect eof
一個自動回答類似 `Proceed? (y/n)` 問題的腳本,輸入 'y'。(為方便範例,使用 `sh`)
SSH 登錄自動化(安全警告)
#!/usr/bin/expect
set timeout 20
set username "your_user"
set hostname "your_host"
set password "your_password"
spawn ssh $username@$hostname
expect "password:"
send "$password\r"
expect "$"
send "ls -l\r"
expect "$"
send "exit\r"
expect eof
一個自動登錄遠端伺服器並執行命令的 SSH 範例。**在腳本中直接包含密碼非常不安全,強烈不建議在實際環境中使用。**
passwd 命令自動化(安全警告)
#!/usr/bin/expect
set timeout 10
set old_pass "old_password"
set new_pass "new_password"
spawn passwd
expect "目前密碼:"
send "$old_pass\r"
expect "新密碼:"
send "$new_pass\r"
expect "請再次輸入新密碼:"
send "$new_pass\r"
expect eof
一個使用 `passwd` 命令自動更改密碼的範例。**在腳本中硬編碼密碼非常不安全。**
提示與注意事項
`expect` 腳本功能強大,但為了安全和穩定性,您需要考慮一些注意事項。
主要提示
- **密碼安全**:在腳本中硬編碼密碼非常危險。請考慮使用環境變數、安全的設定檔或 `ssh-agent` 等其他安全機制。
- **超時設定**:使用 `set timeout` 命令設定 `expect` 等待特定模式的最大時間。預設值為 10 秒,您可以設定 `set timeout -1` 以無限期等待。
- **精確的模式匹配**:`expect` 支援正規表達式。提示字串可能不完全匹配,因此請使用靈活的模式或利用 `*` 萬用字元。
- **調試**:使用 `expect -d your_script.exp` 命令以調試模式執行,可以詳細查看 `expect` 在等待什麼模式以及發送什麼字串。
- **使用 `interact`**:當您想在腳本執行過程中將控制權交還給使用者時,可以使用 `interact` 命令。