回答

收藏

在shell中,“ 2>&1 ”是什么意思?

技术问答 技术问答 567 人阅读 | 0 人回复 | 2023-09-12

在 Unix shell 中,如果我想合并的话stderr并stdout进入stdout我可以在命令结束时添加以下内容:5 U+ S4 @2 Y3 m$ z9 c
    2>&1; l0 n/ ]7 w, [) B0 H
所以,如果我想的话head使用 输出g  ,我可以这样做:5 N& L. L/ z0 L6 C6 n) J
    g   lots_of_errors 2>&1 | head* _7 @" x4 y: \
所以我只能看到前几个错误。
+ P6 y/ Y0 f( I. m, F我总是很难记住这一点,而且我必须经常去查找它,这主要是因为我不完全理解这个特殊技巧的语法。& l" {5 x, N) p2 X! @8 J0 `) y* f
有些人可以打破这一点,并逐字解释什么2>&1 意思吗?
) G0 \7 a# {  f4 P9 x                                                               
' y0 [# T' a* y8 G) G    解决方案:                                                                ( j( J$ ~& ?$ T( `- v
                                                                文件描述符 1 是标准输出 ( )stdout)。
- i1 |6 ?3 ~9 @6 `2 F3 |/ J文件描述符 2 标准错误 ( stderr)。& J; n1 S* G# ?% d8 f- P& s7 _
这是一种记住结构的方法(尽管它不完全准确):起初,2>可能看起来像重定向stderr到stdout.但它实际上被解释为重定向stderr到一份名为1的文件。&表示后面和前面是文件描述符,而不是文件名。因此,结构变成:2>&1.
% |2 S$ U4 `+ C: z! i# R- H( j- k考虑>&作为重定向合并运营商。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则