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

如何结合大括号(curly braces)使用nohup命令?

解决nohup运行stdout/stderr分流命令的语法错误问题

问题原因

nohup 仅能直接调用外部命令或简单命令,你使用的 { ... } 属于 Bash 的复合命令,直接放在 nohup 后会被识别为未知命令,从而触发语法错误。

修正方案

用 bash -c 将整个复合命令包裹,让 Bash 子进程解析这个复合语法结构,修正后的命令如下:

nohup bash -c '{ foo 2>&1 1>&3 3>&- | sed -u '\''s/^/err: /'\''; } 3>&1 1>&2 | sed -u '\''s/^/out: /'\''' >/dev/null 2>&1 &

细节说明

  • 原命令中的单引号 ' 需要转义为 '\'',避免和 bash -c 外层的单引号冲突;
  • 整个复合命令作为字符串参数传递给 bash -c,由子 Bash 进程负责解析执行大括号、重定向、管道等特殊语法。

验证方法

  1. 先给 foo 脚本添加执行权限:chmod +x foo
  2. 运行修正后的命令,执行 ps aux | grep foo 可确认进程正常运行;
  3. 若要查看输出效果,可临时移除 >/dev/null 2>&1,查看 nohup.out 文件,会看到按规则标记的输出:
    out: a
    err: b
    out: a
    err: b
    ...
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 04:05:26