我的作業目錄如下:
MyWorkDirectory
└── test
檔案“test”包含一行資訊:
1:2:3:4:5
當我使用以下命令時:
cat test foo
輸出如下:
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
我認為這里的輸出應該如下:
No such file or directory
但是,這里有很多不同的輸出:
一、
1
No such file or directory
2、
No such file or directory
3
3、
2
4、
...
為什么會產生這些輸出?如果我想實作我的目標,我應該使用什么命令?
uj5u.com熱心網友回復:
這里的問題是“多重重定向”。
這無法在 Ubuntu 上重現的原因是因為 Ubuntu(就像許多基于 Debian 的 Linux 發行版一樣)默認使用 Ash 或 Bash shell,而最近的 MacOS 版本切換到使用 ZSH。
Ubuntu 上的 ZSH 將給出與您得到的結果相似的結果。
顯然,同時使用重定向>和管道會導致 ZSH 以類似于命令|的方式拆分您。stderrtee
這篇文章顯示了該問題的解決方案: 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。
如果沒有,請檢查鏈接的帖子以mult_ios在您的 shell 中啟用選項。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/420365.html
標籤:
