readelf-d-a.out-vim-和-readelf-d-a.out-vim-有什么区别
目录
readelf -d a.out | vim - 和 readelf -d a.out | vim 有什么区别?
readelf -d a.out | vim - 和 readelf -d a.out | vim 有什么区别?
在 Linux 中,readelf -d a.out | vim - 和 readelf -d a.out | vim 这两个命令虽然都尝试将 readelf 的输出传递给 vim,但它们之间存在一个关键差异:
命令解析
readelf -d a.out | vim -- 管道符
|将readelf的标准输出(stdout)连接到vim的标准输入(stdin)。 vim的参数-是一个特殊符号,表示 “从标准输入读取内容”。因此,vim会打开一个新缓冲区,并将readelf的输出作为文件内容显示。
- 管道符
readelf -d a.out | vim- 虽然管道同样将
readelf的输出发送到vim的标准输入,但vim默认不会读取标准输入(除非明确指定-参数)。 - 在这种情况下,
vim会忽略标准输入,直接启动一个空的编辑器窗口(相当于直接运行vim)。readelf的输出会被丢弃,或者在某些环境下导致vim启动异常。
- 虽然管道同样将
实际效果对比
| 命令 | vim 是否读取输入 | 行为 |
|---|---|---|
| `readelf -d a.out | vim -` | ✅ |
| `readelf -d a.out | vim` | ❌ |
为什么需要 - 参数?
vim 的设计决定了它默认从文件系统读取文件,而非标准输入。通过显式传递 - 参数,你告诉 vim:“使用标准输入作为文件内容”。这类似于以下命令:
readelf -d a.out > temp.txt && vim temp.txt # 效果类似 readelf -d a.out | vim -示例场景
假设 readelf -d a.out 输出共享库依赖信息:
Dynamic section at offset 0xe18 contains 26 entries:
Tag Type Name/Value
0x0000000000000001 (NEEDED) Shared library: [libc.so.6]
0x000000000000000c (INIT) 0x400400
...- 使用
| vim -会在vim中显示上述内容,可进行编辑或保存。 - 使用
| vim则会打开空的vim,看不到任何输出,或者vim报错。
总结
如果你想在 vim 中查看或编辑 readelf 的输出,必须使用 | vim -。省略 - 参数会导致标准输入被忽略,这是 vim 的默认行为。