shell - “管道标准错误,而不是标准输出”在 Zsh 中不起作用
问题描述
如何管道标准错误,而不是标准输出?完美地捕捉到了我的问题,第一个答案正是我最初尝试解决它的方式:
(echo stdout; echo 1>&2 stderr) 2>&1 >/dev/null | less
(带有 echos 的 subshell 命令是一个最小的占位符,这要归功于 user1934428 来演示该问题;我的实际问题有一个更有用的命令,但其他人都无法运行。)
但是,它不起作用:它同时显示 stdout和stderr。如果我移除管道,它会按预期工作,只显示标准错误。最终我意识到这可能是一个外壳的东西,并尝试了 bash:它在那里完美地工作。我正在使用 Zsh:Zsh 怎么办?
解决方案
这是由于MULTIOS
,当您提供多个重定向时,它会复制输出流。管道是隐式重定向。
输入ls >/dev/null | less
你的zsh
,即使你重定向它,你也会看到输出。那是多操作系统复制流。
unsetopt multios
将提供所需的行为。这是一个非常方便的功能,如果我不会总是忘记它,直到它激怒我。
http://zsh.sourceforge.net/Doc/Release/Redirection.html#Multios
推荐阅读
- hadoop - YARN:没有活动集群节点
- python - 如何访问另一个文件夹中的文件
- c# - ActionBlock 可以包含状态吗?
- node.js - 以编程方式从 admin SDK 获取 firebase 函数 url
- spring-boot - SpringBoot log4j AppenderSkeleton 方法 append(LoggingEvent) 必须覆盖或实现超类型方法
- sql - 使用 TSTZRANGE 在 PostgreSQL 中为医生创建可用时间
- java - 使用 Axios 从 React 获取请求中的 Spring Pageable 对象
- angular - 将数组映射到 Angular 材质树 - Angular 9
- android - 使用 keytool 构建的每个 .keystore 文件是否都是唯一的?
- azure - 在 ARM 模板中应用 Azure Key Vault no-self-perms 属性