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

nohup运行含嵌套引号与子shell的命令时管道输出丢失问题

问题根源

双引号包裹的字符串中,$(aws ... | tail -1) 这类命令替换会被当前执行nohup的父shell提前解析执行,不会等到nohup拉起的后台子shell运行时再执行。
父shell执行该aws命令时拿不到预期输出(执行时机、运行上下文和前台直接跑命令时不一致),就会把空值替换到命令串里,最终传给子shell的实际执行命令变成echo "some text " >> myfile.txt,写入文件的自然只有固定文本部分。
另外多层双引号嵌套转义很容易出现语法错误,不建议这么写。

修正方案

用单引号包裹传给bash -c的完整命令串,单引号内的所有内容都会被原样传给子shell,父shell不会提前解析里面的命令替换、变量引用,所有逻辑都交给后台启动的bash执行:

nohup bash -c 'echo "some text $(aws ... | tail -1)" >> myfile.txt' &

如果命令中需要引用父shell里的已有变量,把变量部分放在单引号外面拼接即可,比如要引用父shell的$prefix变量:

nohup bash -c 'echo "'"$prefix"' some text $(aws ... | tail -1)" >> myfile.txt' &
可选优化

如果不需要nohup默认生成的nohup.out日志文件,可以把标准输出、标准错误重定向丢弃,避免冗余文件生成:

nohup bash -c 'echo "some text $(aws ... | tail -1)" >> myfile.txt' >/dev/null 2>&1 &

执行后可以用jobs -l查看当前shell关联的后台任务状态,确认任务正常启动。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 21:36:21