在运行一些测试时,我需要运行一系列命令。如果有办法完成所有这些事情,这对我来说将非常有用,并为我节省大量时间:
- 运行我需要运行的命令
- 将命令的所有输出重定向到指定文件
- 在指定文件中包含原始命令
- 在终端中打印原始命令的输出
人们向我建议使用 tee ,它可以很好地打印到终端以及发送到文件,但不包含原始命令。我想最终得到一个文件,其中第一行是我运行的命令,然后下面是命令的输出。
有人建议这样做:
echo "ls -l" | xargs -I{} bash -c "echo >> output.file; eval {} >> output.file"
但这既不会在终端中打印输出,也不会在文件中包含原始命令。
我会很感激任何想法。
那就是
tee
你正在寻找的。将输出打印
ls -l
到标准输出(即终端)并同时将其保存在文件outfile
中。但是:它既不会将命令名称写入标准输出,也不会写入文件。为此,只需echo
在运行命令之前输入命令名称并将两个输出通过管道传输到tee
:打字很麻烦,为什么不定义一个函数呢?
之后你可以运行
得到想要的结果。将函数放入您的函数中,
~/.bashrc
以便在每个新终端中定义它。如果您希望能够将输出文件指定为第一个参数,例如
而是让它:
如果您不希望输出文件被覆盖而是附加到它,请将
-a
选项添加到tee
.您可以使用该
script
命令生成打印到终端的所有内容的打字稿文件。它会创建一个分叉的 shell 并记录所有内容,直到该 shell 退出。然后,如果我
cat my_output
得到相同的输出:您可以将 shell 的调试功能与
tee
:( ... )
启动一个子shell,它允许您“收集”在子shell中执行的所有命令的输出流。它还包含以下set
命令对该子 shell 的影响。set -x
启用x
shell 选项,该选项在运行之前将 shell 运行的所有命令打印到标准错误流。2>&1
将流 2(标准错误)重定向到流 1(标准输出)。|
将左侧命令的标准输出流重定向到右侧命令的标准输入流。tee FILE
将标准输入流复制到文件FILE
和标准输出。如果您的命令序列已经在脚本文件中,那么像这样运行它会更有意义: