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

Shell中如何将stdin和stdout重定向至同一字符设备?

将stdin和stdout重定向到同一字符设备的方法

方法1:用变量减少冗余(简单直接)

先定义设备路径的变量,再执行重定向,既减少重复输入,也方便后续修改:

DEV=/dev/ttyUSB0
rz <"$DEV" >"$DEV"

如果在意shellcheck的SC2094警告(提示不要在同一管道读写同一文件),可以添加注释禁用该检查——因为字符设备不像普通文件,不存在读写覆盖的问题:

DEV=/dev/ttyUSB0
# shellcheck disable=SC2094
rz <"$DEV" >"$DEV"

方法2:用exec预打开读写文件描述符(更优雅)

通过exec预先打开一个同时支持读写的文件描述符,再将stdin和stdout都重定向到这个描述符,完全避免重复设备路径,也不会触发shellcheck警告:

# 打开文件描述符3,同时关联到设备的读写
exec 3<>/dev/ttyUSB0
# 将rz的stdin和stdout都指向文件描述符3
rz <&3 >&3
# 用完后关闭文件描述符(可选,若后续不再使用)
exec 3>&-

为什么rz >/dev/ttyUSB0 <&1会失败?

当执行>/dev/ttyUSB0时,shell是以只写模式打开设备并关联到stdout(文件描述符1)。随后的<&1是让stdin(文件描述符0)引用这个只写的文件描述符,导致程序尝试从只写的文件描述符读取数据,自然会失败,出现超时错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 10:44:55