Skip to content

Instantly share code, notes, and snippets.

@pvinis
Created September 27, 2012 01:22
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save pvinis/3791646 to your computer and use it in GitHub Desktop.
Save pvinis/3791646 to your computer and use it in GitHub Desktop.
shell recording
# for spyshell
function zshexit() {
cat /Users/`whoami`/.termlogs/`date +%Y-%m-%d`.txt | perl -pe 's/\e([^\[\]]|\[.*?[a-zA-Z]|\].*?\a)//g' | col -b > temp
mv temp /Users/`whoami`/.termlogs/`date +%Y-%m-%d`.txt
exit
}
This will help you to record everything you input and all output from your terminal to a file, while you work on your terminal normally.
First, put spyshell in /usr/local/bin/
Add the line /usr/local/bin/spyshell in the file /etc/shells
Do `chsh -s /usr/local/bin/spyshell`
Add the zshexit function in your .zshrc file.
This will create a file in ~/.termlogs/ named with the date, and will append till the day is over. The output is also stripped from any non-printable characters.
You can modify it so that it launches bash, or any other shell, change the location of the logs, as well as the names.
credits: a gist I cannot find, and a lot googling..
#!/bin/bash
script="/usr/bin/script"
SHELL="/usr/local/bin/zsh"
if [ -z "$SPYSHELL" ]; then
export SPYSHELL=yes
$script -aq -t 0 /Users/`whoami`/.termlogs/`date +%Y-%m-%d`.txt
else
exec $SHELL
fi
@WillKoehrsen
Copy link

Thanks a lot for putting this together! I had to execute a few additional commands.

  1. Make spyshell executable: chmod +x /usr/local/bin/spyshell
  2. Make the termlogs directory: mkdir ~/.termlogs

I also had to use sudo to modify /etc/shells: (sudo vim /etc/shells).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment