Log: Difference between revisions

From genomewiki
Jump to navigationJump to search
No edit summary
No edit summary
Line 1: Line 1:
This was inspired by a [http://www.kuro5hin.org/story/2005/12/28/223217/93 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.
I have found a very easy way to keep logfiles of the commands that you executed in your shell to generate a certain annotation file for genome. It was inspired by a [http://www.kuro5hin.org/story/2005/12/28/223217/93 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 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.
I prefer my way as it saves me the copy-pasting. 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:
Add these three lines to your .bashrc:

Revision as of 20:34, 21 November 2009

I have found a very easy way to keep logfiles of the commands that you executed in your shell to generate a certain annotation file for genome. It 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"

I prefer my way as it saves me the copy-pasting. 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.