Log

From genomewiki
Revision as of 20:27, 21 November 2009 by Max (talk | contribs)
Jump to navigationJump to search

This was inspired by a post on kuro5hin some time ago, Of course, makefiles are better than logfiles, but often you're just hacking around and don't want to bother with escaping those $s and tab-characters.

The people at UCSC keep their logfiles in an editor: "We write our shell commands in the makeDb/*.txt files first, then cut and paste those commands to the command line. If they are incorrect, they are corrected in the *.txt file, then cut and paste again to the command line until they work right. The *.txt file is open in an editor until a sequence of operations is completed. --Hiram"

The following script allows you to write the last command to a logfile and later run selected commands from your log.

Add these three lines to your .bashrc:

 export HISTIGNORE="logadd:log"
 alias logadd='history 1 | head -n 1 | cut -d" " -f4- >> log'
 alias logmenu=source ~/usr/bin/scripts/logmenu 

(Please adjust the path ~/usr/bin/scripts here to the directory where you keep your scripts)

When you type logadd now, the last command you typed will be appended to a file called "log". So its a good habit to use logadd after you have found just the right combination of blat, pslSelect, overlapSelect and faPolyASizes, to be able to track down those nasty mistakes 6 months later.

Then save the following file under the name logmenu in the directory where you keep your scripts:

# this scripts needs alias logmenu=source ~/usr/bin/scripts/logmenu 
# in your bashrc otherwise the cmds will not find the way into your history
#!/bin/bash
if [ "$1" == "-h" -o -z $1 ]; then
    echo logmenu: display the file \"log\" as a menu and let the user choose a command to execute
    echo uses the program \"dialog\"
fi

echo -n dialog --menu logfile 24 70 18\  > /tmp/menu
cat log | tr -d \' | gawk "{ ORS=\" \"; print NR, \"\'\" \$0 \"\'\" } " >> /tmp/menu

. /tmp/menu 2> /tmp/menuresult
line=`cat /tmp/menuresult`
echo $line
head -n $line log | tail -n 1 > /tmp/line
history -r /tmp/line
. /tmp/line

rm -f /tmp/line /tmp/menuresult /tmp/menu

Now, when you type logmenu somewhere, a nice menu will pop up, you can select a command, which will then be run and also put into your history, so you can press the up-arrow-key, modify it, run it again, etc.