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

shell中执行命令追加2>err&为什么可以让脚本在后台运行?

命令 test.py 2>err& 含义说明

这个命令可以拆分成三个独立的shell语法部分分别理解:

  • 开头的test.py是你要执行的目标Python脚本
  • 中间的2>err是标准错误重定向规则:
    • shell中运行的所有进程默认自带3个标准文件描述符:
      • 0:标准输入(stdin),默认对应终端的键盘输入
      • 1:标准输出(stdout),默认对应程序正常运行的输出内容
      • 2:标准错误(stderr),默认对应程序运行时抛出的错误、告警类信息
    • >是shell的覆盖重定向符号,作用是把前面文件描述符的输出内容,写入到后面指定的文件中,会覆盖文件原有内容
    • 所以2>err的实际作用,是把脚本运行过程中产生的所有错误类输出,都写入当前目录下名为err的文件中,不会直接打印到终端界面
  • 末尾的&是后台运行标识:
    • 加上这个符号后,命令会被放到系统后台执行,不会占用当前终端的交互会话
    • 后台运行的进程不会监听当前终端的中断信号,所以你无法通过Ctrl+C快捷键终止它,只能通过kill命令向进程发送终止信号来结束运行

你观察到的两种运行方式的差异,核心就是后台运行标记&的作用:直接运行test.py时进程绑定在当前前台终端,会响应Ctrl+C发送的中断信号;后台运行后进程和当前终端的信号绑定解除,自然就收不到终端的快捷键中断信号了。

如果有额外的重定向需求,也可以参考常见写法:

  • 把标准输出也重定向到文件:test.py > output.log 2>err &,其中1>output.log可以简写为>output.log
  • 把标准输出和标准错误都重定向到同一个文件:test.py > all_output.log 2>&1 &

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 04:06:03