bash中是否有日记功能(启动和停止记录)?

时间:2018-02-21 16:25:45

标签: bash

所以我正在使用Octave语言,他们有一个名为diary的有用命令,可以将stdout记录到diary ondiary off之间的任何文件中

diary on
a = [4 5, 2 6, 2 1]
a + 1
diary off

上面会在工作目录中保存一个名为diary的文件,输出为a,然后是+ 1。它对调试非常有帮助,特别是在查看大型数据集时。

我正在查看其他脚本语言,并想知道他们是否有等价物。对于每一行,我能想到的最好的是echo hello.dat >> diary.txt。是否存在可以为bash实现此功能的工具?如果没有,python怎么样?这似乎是一件基本的事情,但是如何做到这一点。

1 个答案:

答案 0 :(得分:3)

如果你不需要内容继续前往TTY,并想要重定向stdout和stderr:

exec 3>&1 4>&2 >>diary.txt 2>&1
echo "Everything here goes to diary.txt"
echo "...without having to redirect each line separately"
exec >&3 2>&4

如果你需要内容继续前往TTY:

exec 3>&1 4>&2 > >(tee -a diary.txt) 2>&1
echo "Everything here goes to diary.txt"
echo "...without having to redirect each line separately"
exec >&3 2>&4

请注意,您不能将stdout和stderr重定向到文件而不会丢失其排序(即,有两个单独的tee副本并且希望他们完成刷新按照与它们开始写入的顺序相同的顺序)或丢失哪个输出到哪个描述符的信息。

以上也可以使用具有单个重定向的多行块来完成,它将自动执行设置和清理:

{
  echo "Everything here goes to diary.txt"
  echo "...without having to redirect each line separately"
} >>diary.txt 2>&1