Bash中同时重定向标准输出与标准错误至同一文件的问题
Bash中同时重定向标准输出与标准错误至同一文件的问题
嘿,我完全懂你现在的需求——就是想把aapt命令的正常输出和错误信息都攒到同一个文件里对吧?你之前分开重定向到两个文件的操作没问题,那咱们来搞定合并的事儿。
你提到Bash手册里的&>写法确实是有效的,直接用这个就能一步到位:
/usr/local/bin/aapt dump badging base.apk &> soutandserror.text
这个是Bash专属的简化写法,专门用来把标准输出(文件描述符1)和标准错误(文件描述符2)一起重定向到同一个文件里。
如果你需要兼容POSIX标准的写法(比如在sh这类非Bash的shell里也能跑),那可以用更经典的写法:
/usr/local/bin/aapt dump badging base.apk > soutandserror.text 2>&1
这里得给你掰扯下顺序的重要性:> soutandserror.text先把标准输出定向到目标文件,然后2>&1是把标准错误重定向到当前标准输出指向的位置(也就是刚才的目标文件)。要是你把顺序搞反写成2>&1 > soutandserror.text,那结果就不对了——因为会先把错误输出定向到原来的标准输出(也就是你的终端),之后才把标准输出定向到文件,最后错误信息还是会跑到终端上,这是新手常踩的小坑。
另外提一嘴,你之前在终端上看到错误信息在底部,是因为标准错误默认是无缓冲的,而标准输出是行缓冲的,合并到文件里的话,内容顺序可能和终端显示的略有差异,这是缓冲机制导致的,属于正常情况哈。
备注:内容来源于stack exchange,提问作者confused
相关产品推荐
相关产品推荐

