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

`exec {logOutFd}>&1 {logErrFd}>&2` 这条Shell命令的作用是什么?

解析NixOS启动脚本中的exec {logOutFd}>&1 {logErrFd}>&2

这行代码并非无意义的空exec命令,而是Bash特有的文件描述符动态分配与复制语法,具体功能拆解如下:

  • {logOutFd}>&1:让Bash自动分配一个未被占用的文件描述符,将其编号存入变量logOutFd,同时把这个新描述符设置为标准输出(文件描述符1)的副本——也就是说,这个新描述符会指向和当前标准输出相同的目标(比如启动时的控制台)。
  • {logErrFd}>&2:逻辑和上面一致,自动分配另一个未被占用的文件描述符并赋值给logErrFd,同时将其设置为标准错误(文件描述符2)的副本。

实际作用

在启动流程中,后续脚本很可能会将标准输出/错误重定向到日志文件(比如exec >/var/log/boot.log 2>&1),此时原来的控制台输出通道会被覆盖。而通过logOutFd和logErrFd这两个保存下来的描述符,脚本可以随时将指定内容输出到原本的控制台(比如关键的启动成功/失败提示),而不是写入日志文件,保证用户能及时看到重要信息。

比如后续可以这样使用:

# 临时输出到原控制台
echo "系统启动完成,请登录" >&$logOutFd

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 06:24:56