You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让tee命令记录用户对程序提示符的输入内容?

解决交互式命令日志缺失用户输入的问题

当运行openssl req这类需要用户交互输入的命令时,直接用管道| tee只能捕获程序输出的提示符,无法记录用户输入内容——原因是tee默认只捕获标准输出(stdout),而用户输入是通过**标准输入(stdin)**传入的,不会被管道捕获。下面是几种可行的解决方案:

方法1:使用script命令(最简便)

script是专门用来记录终端会话的工具,能完整捕获包括用户输入、程序输出在内的所有交互内容:

script -a openssl-req.log
# 之后在新的会话中运行你的命令
openssl req [your options]
# 完成后按Ctrl+D退出script会话

执行后openssl-req.log会包含所有终端交互内容,包括你输入的每一行和程序的响应。

方法2:手动关联标准输入与输出

如果不想用script,可以通过管道将用户输入同步写入日志,需要用到文件描述符配合tee:

# 创建临时管道文件
mkfifo input_fifo
# 后台读取管道内容并追加到日志
cat input_fifo | tee -a openssl-req.log &
# 运行命令,同时将用户输入发送到管道和程序
openssl req [your options] < input_fifo | tee -a openssl-req.log
# 清理临时管道
rm input_fifo

注意:这种方式会明文记录所有输入内容,若涉及敏感信息(如密码)需谨慎使用。

方法3:使用expect脚本(适合自动化场景)

如果需要自动化执行并记录完整交互流程,可编写expect脚本控制命令并记录日志:

#!/usr/bin/expect -f
log_file -a openssl-req.log

# 启动openssl命令
spawn openssl req [your options]

# 模拟用户输入,需根据实际提示符调整
expect "Country Name (2 letter code) \[AU]:"
send "CN\r"
expect "State or Province Name (full name) \[Some-State]:"
send "Beijing\r"
# 继续添加其他交互步骤...

expect eof

保存为record_openssl.exp,赋予执行权限后运行:

chmod +x record_openssl.exp
./record_openssl.exp

这种方式适合批量处理或预先定义输入的场景,日志会完整包含所有交互细节。


内容的提问来源于stack exchange,提问作者Underhill

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 18:18:11