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

如何使yes命令返回非零退出码?

让yes命令返回非零退出码的方法

yes命令的核心逻辑是持续向标准输出写入指定字符串(默认y\n),直到写入操作失败或被终止。结合它的实现逻辑,我们可以通过以下几种极端场景让它返回非零退出码:

1. 关闭标准输出文件描述符

直接关闭stdout后再运行yes,此时程序尝试向已失效的文件描述符写入,会触发写入错误并退出:

exec 1>&-; yes

yes在写入时检测到stdout错误,会以EXIT_FAILURE(非零)退出。

2. 限制进程可用内存触发分配失败

yes启动时会分配一块缓冲区存储要输出的字符串。如果用ulimit限制进程的虚拟内存足够小,会导致内存分配失败,程序直接退出并返回非零:

ulimit -v 100; yes

注:具体的内存限制值可能需要根据系统调整,确保内存分配无法完成。

3. 输出到已满的文件系统

当输出目标的磁盘空间耗尽时,写入操作会失败,yes会检测到错误并退出:

# 挂载一个极小的tmpfs
mount -t tmpfs -o size=1k tmpfs /tmp/yes-test
# 让yes输出到该目录下的文件
yes > /tmp/yes-test/full-file

当磁盘满时,写入返回的字节数小于预期长度,程序会触发错误处理逻辑,返回非零退出码。

4. 管道另一端提前关闭

当yes通过管道输出时,如果管道的读端提前退出(比如head只读取一行就终止),yes会收到SIGPIPE信号,默认会被终止并返回退出码141:

yes | head -n1
# 查看退出码
echo $?

这是因为管道写端在无读端时写入,系统会发送SIGPIPE终止进程,退出码141表示进程因该信号终止。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 09:05:15