gpt4 book ai didi

shell - stdout 是否存储在文件系统或内存中的某个位置?

转载 作者:行者123 更新时间:2023-12-05 00:27:22 25 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Send output of last command to a file automatically in bash?

(3 个回答)


8年前关闭。




我知道我可以使用 last_output=$(my_cmd) 将命令的结果保存到变量中。但我真正想要的是$last_output每次运行命令时都会更新。是否有可以安装的变量、zsh 模块或插件?

我想我的问题是 stdout永久写入某处(至少在下一个命令之前)?这样我就可以操纵前一个命令的结果,而不必重新运行它。这对于需要很长时间运行的命令非常有用

最佳答案

如果您运行以下命令:

exec > >(tee save.txt)
# ... stuff here...
exec >/dev/tty

...然后,您在两个命令之间运行的所有内容的标准输出都将转到标准输出和 save.txt。 .

当然,您可以编写一个 shell 函数来为您执行此操作:
with_saved_output() {
"$@" \
2> >(tee "$HOME/.last-command.err >&2) \
| tee "$HOME/.last-command.out"
}

...然后随意使用它:
with_saved_output some-command-here

...而且 zsh 几乎肯定会提供一种机制来包装交互式输入的命令。 (在 bash 中,我可以更直接地与之交谈,您可以使用 DEBUG 陷阱做同样的事情)。

然而,即使你 可以 ,你 不应该 这样做:当您将 stdout 和 stderr 拆分为两个流时,即使这些流稍后重新组合,有关写入的确切顺序的信息也会丢失。

因此,输出
O: this is written to stdout first
E: this is written to stderr second

可能变成:
E: this is written to stderr second
O: this is written to stdout first

当这些流单独通过 tee子进程将副本写入磁盘。还会产生缓冲问题,以及由检查是否输出到 TTY 并改变其行为的软件引起的行为差异(例如,软件在直接写入控制台时打开颜色编码输出,在写入时关闭文件或管道)。

关于shell - stdout 是否存储在文件系统或内存中的某个位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20863282/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com