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