基础方法:管道与重定向
通过管道()或重定向(<<<)向程序发送按键:
# 多行输入(EOF 标记) command <<EOF yes input2 EOF
适用场景:简单命令(如确认提示),支持大部分Shell(Bash/Zsh)。
特殊按键的表示
需用转义序列表示非打印字符:
-
\n或\r:回车(Enter) -
\t:制表符(Tab) -
\e:ESC键 -
组合键需转换为ASCII码(通过
printf):# Ctrl+C (ASCII 3) printf "\x03" | command # 方向键(上箭头:\e[A) echo -e "\e[A" | command
自动化工具:expect
处理复杂交互(如SSH登录、sudo密码):
- 安装:
sudo apt install expect(Linux/macOS) - 脚本示例:
#!/usr/bin/expect spawn command # 启动交互式程序 expect "Password:" # 等待提示 send "mypassword\r" # 发送密码+回车 expect eof
优势:精确匹配提示并响应,支持超时控制。
终端控制:stty 与 tty
直接操作终端设备(高级场景):
# 关闭回显(用于输入密码) stty -echo read -s password stty echo # 向当前终端发送按键 echo -e "\n" > /dev/tty
图形界面按键模拟(xdotool)
适用于Linux桌面环境:
xdotool key Enter # 模拟回车 xdotool key Ctrl+c # 模拟Ctrl+C xdotool type "text" # 输入文本
注意事项
- 安全性:
- 避免在脚本中硬编码密码(使用环境变量或密钥管理)。
expect脚本需设置权限为700。
- 兼容性:
echo -e在BSD/macOS中可能失效 → 改用printf。- Windows需借助WSL或Cygwin。
- 特殊终端:
- 某些程序(如
vim)需结合tmux或screen自动化。
- 某些程序(如
方法选择指南
| 场景 | 推荐方法 |
|---|---|
| 简单文本+回车 | echo/printf+管道 |
| 密码/复杂交互 | expect |
| 组合键(Ctrl+C/Tab) | printf+ASCII码 |
| Linux图形界面 | xdotool |
引用说明参考Linux man-pages (man7.org)、GNU Bash手册 (gnu.org) 及Expect官方文档 (expect.sourceforge.net),遵循POSIX标准及行业最佳实践。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/7690.html