/dev/stdout 是否有一个 bash 快捷方式,就像 /dev/stdin 有“-”一样?
其中一个用例是获取不带行号的 bash 历史记录。history 内置命令中根本没有这个选项。我们可以执行“history -w /dev/stdout”。但这会输入 11 个字符(/dev/stdout),如果可能的话,我希望将其缩短为 1 个。
答案1
许多应用程序使用的快捷方式-
不是由 shell 处理的特殊令牌——它只是在许多应用程序中实现的约定。cat -
是一个常见的例子,但cat
必须手动实现该功能。来自 coreutilscat
源代码:
bool reading_stdin = STREQ (infile, "-");
if (reading_stdin) {
//...
} else {
//...
因此,我们无法使用/dev/stdout
这样的快捷方式执行重定向之类的操作 - 重定向和管道在 shell 级别处理,而参数只是传递给调用的程序。事实上,cat -
从 stdin 读取,但从cat < -
名为 的文件中读取-
。
话虽如此,您有理由期待这一点;-
它通常用作将输出重定向到 stdout 以及从 stdin 输入的快捷方式。ffmpeg
是我脑海中使用这种快捷方式的一个值得注意的例子,但我相信还有很多。
然而,对于 bash 的内置history
,你可能运气不佳——它似乎没有实现任何这样的快捷方式。Bash 的历史印刷和历史写作实现是两个独立的代码路径,并且似乎没有任何方法可以禁用前者中的编号。
如果你不想在输出中看到数字,你可以执行HISTTIMEFORMAT
Gerald Schneider 链接到的 hack 操作这里。如果您不喜欢这种 hack 操作或者只是想偶尔删除数字,您可以通过运行history -w /dev/fd/1
(FD 1 始终是 stdout,我认为) 来节省原始的两次击键。