Mac*_*ber 8 vim bash io-redirection
我在重定向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
Run Code Online (Sandbox Code Playgroud)
输出文件中有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
Run Code Online (Sandbox Code Playgroud)
请注意,.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
Run Code Online (Sandbox Code Playgroud)
在这里,STDERR被正确地重定向:
$ cat /tmp/ls.err
ls: cannot access /ZZZ: No such file or directory
Run Code Online (Sandbox Code Playgroud)
我对gvim --version进行了一次调查,并确认它正在尝试将版本信息写入STDOUT(fd 1).无论哪种方式都没关系,因为我试图捕获STDOUT和STDERR.
这里发生了什么?
恭喜你,你刚刚发现了一个错误gvim!正确的程序是在GitHub上提交一个新问题.
您应该首先尝试该错误的其他变体,以便开发人员更容易调试.
例如,仅重定向STDERR也会导致错误,因为没有写入输出.还有返回成功(0),这显然是一个错误.
$ gvim --version 2> /tmp/version.err
$ echo $?
0
Run Code Online (Sandbox Code Playgroud)
通过仅查看代码,可以在版本打印中的某处搜索错误,或者在泛型 - 版本参数处理中的任何地方搜索,而不是由gtk完成.
到底是怎么回事?
这是一个程序错误,由开发人员制作gvim,我不建议你努力找到它的根本原因,除非你有编码经验vim或者你想学习,如何vim工作.在这种情况下,你最好的选择是分叉回购并在修复它之后,提交拉取请求,这样每个人都可以从你的工作中受益.
| 归档时间: |
|
| 查看次数: |
148 次 |
| 最近记录: |