/dev/stdout 是否有快捷方式,就像 /dev/stdin 有“-”一样?

/dev/stdout 是否有快捷方式,就像 /dev/stdin 有“-”一样?

/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 的历史印刷历史写作实现是两个独立的代码路径,并且似乎没有任何方法可以禁用前者中的编号。

如果你不想在输出中看到数字,你可以执行HISTTIMEFORMATGerald Schneider 链接到的 hack 操作这里。如果您不喜欢这种 hack 操作或者只是想偶尔删除数字,您可以通过运行history -w /dev/fd/1(FD 1 始终是 stdout,我认为) 来节省原始的两次击键。

相关内容