所以我正在使用Octave语言,他们有一个名为diary
的有用命令,可以将stdout记录到diary on
和diary off
之间的任何文件中} p>
diary on
a = [4 5, 2 6, 2 1]
a + 1
diary off
上面会在工作目录中保存一个名为diary的文件,输出为a,然后是+ 1。它对调试非常有帮助,特别是在查看大型数据集时。
我正在查看其他脚本语言,并想知道他们是否有等价物。对于每一行,我能想到的最好的是echo hello.dat >> diary.txt
。是否存在可以为bash实现此功能的工具?如果没有,python怎么样?这似乎是一件基本的事情,但是如何做到这一点。
答案 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