bash中是否有日志功能(用于启动和停止日志)?

bash中是否有日志功能(用于启动和停止日志)?,bash,Bash,所以我在玩Octave语言,他们有一个名为diary的有用命令,它可以将stdout记录到一个文件中,记录diary on和diary off diary on a = [4 5, 2 6, 2 1] a + 1 diary off 上面将在工作目录中保存一个名为diary的文件,输出为a,然后是a+1。这对调试非常有帮助,尤其是在查看大型数据集时 我正在研究其他脚本语言,并想知道它们是否有等价物。我能想到的最好的办法就是为每一行写上echo hello.dat>>diary.txt。是否存在

所以我在玩Octave语言,他们有一个名为
diary
的有用命令,它可以将stdout记录到一个文件中,记录
diary on
diary off

diary on
a = [4 5, 2 6, 2 1]
a + 1
diary off
上面将在工作目录中保存一个名为diary的文件,输出为a,然后是a+1。这对调试非常有帮助,尤其是在查看大型数据集时


我正在研究其他脚本语言,并想知道它们是否有等价物。我能想到的最好的办法就是为每一行写上
echo hello.dat>>diary.txt
。是否存在可以为bash实现此功能的工具?如果不是,那么python呢?这似乎是一件基本的事情,但idk如何做到这一点。

如果您不需要内容继续转到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

您想只记录标准输出吗?Stdout和stderr都是?内容还应该镜像到TTY吗?看看这篇文章:@codeforester,就
script
创建一个新的shell而言,并不完全相同,因此不能停止日志,而是保留新的shell局部变量。顺便说一句,“八度”只有当知道八度音阶的人能够合理地回答这个问题时,才应该使用标记。@CharlesDuffy,我不太确定。你的回答似乎表明对问题的要求有一点误解,我希望熟悉八度和bash的人能够更准确地回答。很好!对不起,我仍然是一个bash noob,你能解释一下2>&1操作的含义吗?重定向fd2(stderr)以指向fd1(stdout)所在的位置。请参阅及其链接。因此。。虽然这很有趣,但我认为这并不是
日记
在八度音阶中所做的。考虑Python的交互模式。如果您只是键入一个变量名,它会显示变量的内容。Octave的
日记
将在每次作业后隐式地完成此操作。如果存在这样的功能,我希望它是
set
shopt
的东西。@ghoti,…明白了。我认为OP需要扩展这个问题,以便更清楚地了解他们想要什么。可以在bash中使用自定义的
PS4
set-x
组合来执行类似的操作。