基础方法:管道与重定向
通过管道()或重定向(<<<
)向程序发送按键:
# 多行输入(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