[英]An error occurred while processing STDERR using the pipe
我的工作目錄如下:
MyWorkDirectory
└── test
文件“test”包含一行信息:
1:2:3:4:5
當我使用以下命令時:
cat test foo
output如下:
1:2:3:4:5
cat: foo: No such file or directory
我想忽略STDOUT
只處理STDERR
,我想用 cut 命令得到第三個用“:”分隔的STDERR
段,所以我嘗試了以下命令:
cat test foo 2>&1 1>/dev/null | cut -d ':' -f 3
我覺得這里的output應該是這樣的:
No such file or directory
但是,這里有很多不同的輸出:
一、
1
No such file or directory
2、
No such file or directory
3
3、
2
4、
...
為什么會產生這些輸出? 如果我想實現我的目標,我應該使用什么命令?
這里的問題是“多重重定向”。
The reason this can not be reproduced on Ubuntu, is because Ubuntu (like many Debian based Linux distros) uses Ash or Bash shell by default, while recent MacOS version switched to using ZSH.
Ubuntu 上的 ZSH 將給出與您得到的結果相似的結果。
顯然,同時使用重定向>
和 pipe |
導致 ZSH 分裂你的stderr
,類似於tee
命令。
這篇文章顯示了該問題的解決方案: https://unix.stackexchange.com/questions/265061/how-can-i-pipe-only-stderr-in-zsh
具體來說,您需要在將stdout
重定向到/dev/null
之前關閉它以防止拆分:
cat test foo 2>&1 >&- > /dev/null | cut -d ':' -f 3
這適用於 Ubuntu 上的 ZSH,並且應該適用於 Mac OS。
如果沒有,請檢查鏈接帖子以在 shell 中啟用mult_ios
選項。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.