iobender
iobender

Reputation: 3486

How do I automatically save the output of the last command I've run (every time)?

If I wanted to have the output of the last command stored in a file such as ~/.last_command.txt (overwriting output of previous command), how would I go about doing so in bash so that the output goes to both stdout and that file? I imagine it would involve piping to tee ~/.last_command.txt but I don't know what to pipe to that, and I definitely don't want to add that to every command I run manually.

Also, how could I extend this to save the output of the last n commands?

Upvotes: 4

Views: 320

Answers (4)

shx2
shx2

Reputation: 64378

When starting a new session (after login, or after opening the terminal), you can start another "nested" shell, and redirect its output:

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

Actually, you don't even have to enter a nested shell every time. You can simply replace your shell-command in /etc/passwd from bash to bash | tee -a ~USERNAME/.bash_output.

Upvotes: 0

Walter A
Walter A

Reputation: 20032

Overwrite for 1 command:

script -c ls ~/.last_command.txt

If you want more than 1 command:

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

If you want to save during 1 login session, append "script" to .bashrc

Upvotes: 0

Sylvain Leroux
Sylvain Leroux

Reputation: 52070

This will break program/feature expecting a TTY, but...

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

If it is acceptable to record all output, this can be simplified:

exec > >(tee ~/.commands)

Upvotes: 0

hookenz
hookenz

Reputation: 38967

Under bash this seems to have the desired effect.

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

You can add it to your bashrc file to make it permanent.

I should point out it's not perfect. Just hitting the enter key and you get:

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

So I think it needs a little more work.

Upvotes: 1

Related Questions