如何自动保存我运行的最后一个命令的输出(每次)?

时间:2014-07-23 02:28:23

标签: bash shell command-line

如果我想将最后一个命令的输出存储在~/.last_command.txt等文件中(覆盖上一个命令的输出),我将如何在bash中这样做,以便输出转到stdout那个文件?我想它会涉及到tee ~/.last_command.txt的管道,但我不知道该怎样管道,我绝对不想将它添加到我手动运行的每个命令。

另外,我如何扩展它以保存最后n个命令的输出?

4 个答案:

答案 0 :(得分:1)

在bash下,这似乎有了预期的效果。

bind 'RETURN: "|tee ~/.last_command.txt\n"'

您可以将其添加到bashrc文件中以使其永久化。

我应该指出它并不完美。只需点击回车键即可获得:

matt@devpc:$ |tee ~/.last_command.txt
bash: syntax error near unexpected token `|'

所以我认为它需要更多的工作。

答案 1 :(得分:0)

这会打破期待TTY的程序/功能,但是......

exec 4>&1
PROMPT_COMMAND="exec 1>&4; exec > >(mv ~/.last_command{_tmp,}; tee ~/.last_command_tmp)"

如果记录所有输出是可以接受的,可以简化:

exec > >(tee ~/.commands)

答案 2 :(得分:0)

开始新会话时(登录后或打开终端后),您可以启动另一个"嵌套" shell,并重定向其输出:

<...login...>
% bash | tee -a ~/.bash_output
% ls  # this is the nested shell
% exit
% cat ~/.bash_output
% exit

实际上,您甚至不必每次都进入嵌套的shell。您只需将/etc/passwd中的shell命令从bash替换为bash | tee -a ~USERNAME/.bash_output

答案 3 :(得分:0)

覆盖1个命令:

script -c ls ~/.last_command.txt

如果您想要多于1个命令:

$ script ~/.last_command.txt
$ command1
$ command2
$ command3
$ exit

如果要在1次登录会话期间保存,请将“脚本”附加到.bashrc