我在重定向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.
正确的程序是 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,在修复之后,提交拉取请求,以便每个人都可以从您的工作中受益.