bash – 重定向的意外输出

前端之家收集整理的这篇文章主要介绍了bash – 重定向的意外输出前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在重定向STDOUT和STDERR时遇到了一个奇怪的问题.以下按预期工作:
$gvim --version > /tmp/version.out
$ls -l /tmp/version.out
-rw-r--r--. 1 blah blah 3419 Jun 27 17:28 /tmp/version.out

输出文件中有3419个字符,当我查看文件时,它包含我所期望的内容.

但是,当我执行以下操作时,它无法正常工作:

$gvim --version > /tmp/version.out 2> /tmp/version.err
$ls -latr /tmp/version.*
-rw-r--r--. 1 blah blah 0 Jun 27 17:29 /tmp/version.out
-rw-r--r--. 1 blah blah 0 Jun 27 17:29 /tmp/version.err

请注意,.out和.err文件这次都是零长度.我用ls命令尝试了这个,它按预期工作:

$ls . /ZZZ > /tmp/ls.out 2> /tmp/ls.err
$ls -l /tmp/ls.*
-rw-r--r--. 1 blah blah 50 Jun 27 17:45 /tmp/ls.err
-rw-r--r--. 1 blah blah 33 Jun 27 17:45 /tmp/ls.out

在这里,STDERR被正确地重定向

$cat /tmp/ls.err
ls: cannot access /ZZZ: No such file or directory

我对gvim –version进行了一次调查,并确认它正在尝试将版本信息写入STDOUT(fd 1).无论哪种方式都没关系,因为我试图捕获STDOUT和STDERR.

这里发生了什么?

恭喜,您刚刚在gvim中发现了一个错误
正确的程序是 file a new issue on GitHub.

您应该首先尝试该错误的其他变体,以便开发人员更容易调试.

例如,仅重定向STDERR也会导致错误,因为没有写入输出.还有返回成功(0),这显然是一个错误.

$gvim --version 2> /tmp/version.err
$echo $?
0

通过查看代码,可以在version printing中的任何地方搜索bug,或者在泛型–version参数处理中的任何地方搜索not being done by gtk.

回答你的问题

到底是怎么回事?

这是一个程序错误,由gvim的开发人员制作,我不建议你努力找到它的根本原因,除非你有编码vim的经验或者如果你想学习,vim如何工作.在这种情况下,您的最佳镜头是fork the repo,在修复之后,提交拉取请求,以便每个人都可以从您的工作中受益.

猜你在找的Bash相关文章