![如何自动将终端命令输出保存到文件](https://linux22.com/image/855218/%E5%A6%82%E4%BD%95%E8%87%AA%E5%8A%A8%E5%B0%86%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4%E8%BE%93%E5%87%BA%E4%BF%9D%E5%AD%98%E5%88%B0%E6%96%87%E4%BB%B6.png)
有没有办法将终端命令输出保存到文件中,而不必每次都写入命令'| tee /abc.txt'?
答案1
一种选择是使用该script
程序
NAME
script — make typescript of terminal session
SYNOPSIS
script [-a] [-c command] [-e] [-f] [-q] [-t[=file]] [-V] [-h] [file]
DESCRIPTION
script makes a typescript of everything printed on your terminal. It is
useful for students who need a hardcopy record of an interactive session
as proof of an assignment, as the typescript file can be printed out
later with lpr(1).
但请注意,这可以script
节省一切在终端中(而不仅仅是命令输出) - 包括 ANSI 颜色序列,这会使在彩色终端的情况下从结果文件中提取纯文本变得困难。
免责声明:
以下只是一个想法,使用时可能会出现一些我不知道的陷阱
类似于@MomentumMori 建议的生成tee
-d bash 子 shell,如果你想要使用重定向,你可以这样做
exec 3>&1
保存当前标准输出文件描述符,然后
exec 1> >(tee -a outfile)
从此时起,标准输出被重定向到tee
子过程将所有内容附加到outfile
。由于我们尚未重定向子进程的输出流,因此命令输出的副本仍会出现在终端中。
完成要捕获其输出的命令后,您可以反转重定向并关闭临时文件描述符
exec 1>&3 3>&-
之后你可以查看outfile
命令的输出
cat outfile
答案2
是的。
在您的终端上使用tee
。
$ bash | tee /abc.txt
解释
bash
将在当前使用的 shell 中启动另一个 shell。看起来好像什么都没发生,但是,如果您尝试关闭终端,系统会提示您类似以下内容:There is still a process running in this terminal. Closing the terminal will kill it.
那个进程就是
bash
。它会像读取其他 shell 一样读取你的命令,没有任何问题,因为你的第一个 shell 很可能bash
也正在运行。这只是一个例子。还有其他 shell,你可以在这里找到它们:[审阅者,在此处插入链接 1]完成后,您可能想要键入内容
exit
来关闭它。|
是用来表示管道的字符。M. Jackson 在这里解释了它们的含义:http://www.dsj.net/compedge/shellbasics1.html管道。UNIX 哲学提倡使用小型但高度集中的程序,这些程序可以一起使用来执行复杂的任务。因此,学习如何在命令行上将多个小命令串联在一起是熟悉 Bash 的内在部分。为此,我们将一个程序的标准输出定向到另一个程序的标准输入中,但我们不使用重定向器,而是使用管道运算符“|”。在 UNIX 中,通过管道连接的进程随着数据在它们之间流动而动态地一起运行。
- 并且
tee
,为了完整起见:[审阅者,在此处插入链接 2][读取] 从标准输入并写入标准输出和文件
bash
(更准确地说是其中运行的命令的输出)将作为tee
其输入。这样就无需| tee /abc.txt
在每个命令之后使用 来在 shell 上查看其输出并将其保存在文件系统中。
答案3
不。
这与称为“标准输入”和“标准输出”的套接字的工作方式有关,也与 Unix/Linux 工具链的总体理念“只做一件事,做好它”有关。你可能需要花一两分钟来理解http://www.tldp.org/LDP/abs/html/io-redirection.html “Bash 中的 IO 重定向”
综上所述,您可以编写一个脚本来使用该重定向包装命令,但它仍然不能为您节省很多击键次数。