shell 中启动命令重定向标准错误(stderr)到标准输出(stdout) 语法

基础组合

(1) 标准输出和错误合并到文件

command > output.log 2>&1
  • 解释
    • > output.log:将 stdout 重定向到 output.log
    • 2>&1:将 stderr 合并到 stdout,最终所有输出(正常和错误)都写入 output.log
  • 用途:记录全部日志(如服务启动)。

(2) 仅重定向错误到文件

command 2> error.log
  • 解释:仅将 stderr 写入 error.logstdout 仍打印到终端。

(3) 分离输出和错误到不同文件

command > output.log 2> error.log
  • 用途:区分正常日志和错误日志(如调试时)。

高级组合

(4) 丢弃所有输出(静默执行)

command > /dev/null 2>&1
  • 解释
    • > /dev/null:丢弃 stdout
    • 2>&1:将 stderr 也丢弃。
  • 用途:后台运行不需要日志的命令(如定时任务)。

(5) 实时输出并同时保存到文件

command 2>&1 | tee output.log
  • 解释
    • 2>&1:合并 stderrstdout
    • | tee output.log:输出到终端的同时写入文件。
  • 用途:需要实时查看日志并保存的场景。

(6) 追加模式(不覆盖原有文件)

command >> output.log 2>&1
  • 关键>> 表示追加,> 表示覆盖。

特殊用法

(7) 仅重定向错误到标准输出

command 2>&1 > output.log
  • 区别
    • 此写法会先将 stderr 合并到当前 stdout(终端),再将 stdout 重定向到文件。
    • 最终效果:错误输出到终端,正常输出到文件
  • 示例
    ls exist.txt not_exist.txt 2>&1 > output.log
    
    • 终端显示错误(not_exist.txt 不存在),正常结果(exist.txt)写入文件。

(8) 交换 stdout 和 stderr

command 3>&1 1>&2 2>&3
  • 解释:通过临时文件描述符 3 交换两者(罕见需求)。

常见问题

为什么 2>&1 必须在 > 之后?

  • 顺序很重要!
    command > file 2>&1  # 正确:先重定向 stdout,再将 stderr 合并到 stdout。
    command 2>&1 > file  # 错误:stderr 会输出到终端,而非文件。
    

nohup 中的典型用法

nohup command > nohup.out 2>&1 &
  • nohup 默认会将输出保存到 nohup.out,但显式重定向更可控。

总结

组合命令效果
> file 2>&1合并输出和错误到文件
2> error.log仅错误输出到文件
> file 2> error.log分离输出和错误到不同文件
>> file 2>&1追加模式合并输出
2>&1 | tee file实时输出并保存
> /dev/null 2>&1丢弃所有输出
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值