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

如何修改bashrc实现仅记录bash中最后一条命令及其输出?

实现Bash仅记录最后一条命令的输出到日志文件

可以通过修改~/.bashrc实现这个需求,核心是利用Bash的trap陷阱和PROMPT_COMMAND机制,替代你之前的全局重定向配置,确保日志始终只保留最后一条命令的输出:

配置步骤

在~/.bashrc末尾添加以下代码:

# 定义最后一条命令输出的日志文件路径
LAST_CMD_LOG="$HOME/.last_command_output.log"

# 保存原始的标准输出和错误输出(避免丢失终端输出能力)
exec 3>&1 4>&2

# DEBUG陷阱:每条命令执行前,将输出重定向到日志(覆盖模式)
trap 'exec > >(tee "$LAST_CMD_LOG") 2>&1' DEBUG

# PROMPT_COMMAND:命令执行完成后,恢复终端的标准输出和错误输出
PROMPT_COMMAND='exec >&3 2>&4'

配置说明

  • exec 3>&1 4>&2:先把当前终端的标准输出(文件描述符1)和错误输出(文件描述符2)分别保存到文件描述符3和4,后续恢复输出时会用到。
  • trap '...' DEBUG:DEBUG陷阱会在每条命令执行前触发,此时将输出重定向到tee命令,tee会直接覆盖日志文件(无-a参数),同时把内容输出到终端,保证你能实时看到命令输出。
  • PROMPT_COMMAND='...':该命令会在每条命令执行完成后触发,把标准输出和错误输出恢复到之前保存的终端状态,避免后续操作的输出一直被重定向到日志。

优化:排除交互式命令

如果执行如vim、nano这类交互式命令时出现终端显示异常,可以修改trap逻辑,排除指定命令:

trap '
  # 排除交互式命令,避免终端显示异常
  if [[ "$BASH_COMMAND" != "vim" && "$BASH_COMMAND" != "nano" && "$BASH_COMMAND" != "less" ]]; then
    exec > >(tee "$LAST_CMD_LOG") 2>&1
  fi
' DEBUG

配置完成后,执行source ~/.bashrc使配置生效。之后每次执行命令的输出都会覆盖日志文件,机器重启后查看~/.last_command_output.log就能获取最后一次执行的命令输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 02:12:46