Tip of the day
Random collection of ways a Linux desktop computer makes your life easier. Also contains ideas for effectively using the RidgeRun SDK.
Helpful shell scripts
My rule-of-thumb is if you type the same 3 or more commands over and over again, you need to use a shell script to automate that task. Being able to automate tasks is the main reason I like the command line interface over a GUI interface.
To make it easy to create, modify, use, and backup your scripts, we first need a logical place to store them.
Store shell scripts in $HOME/bin
Since starting to use a Posix based O.S. back in 1985 (HP-UX), I have always stored my personal helper scripts in $HOME/bin. I am not sure who taught me to do that or why, but it has worked well for years.
You need to create the directory and then modify your patch so your shell can find the scripts. I use bash, so I modify the PATH in $HOME/.bashrc
mkdir $HOME/bin echo 'export PATH:$PATH:$HOME/bin' >> $HOME/.bashrc export PATH:$PATH:$HOME/bin
Now you can store your scripts (examples shown below) in $HOME/bin and run them by just entering the script name.
For example, if you want to add the finds script below to your $HOME/bin, you can use
sudo apt-get install geany geany $HOME/bin/finds # copy and paste the script into your geany window, save, and exit chmod ugo+x $HOME/bin/finds
Review view mirror cd -- where have I been
You can add the following to your $HOME/.bashrc start up script. Then you can easily navigate to directories you have been visited before. Credit goes to [http:/geocities.com/h2428 Petar Marinov], who put this version of cd_func in the public domain. Tweaks by Jose Jimenez. use cd -- to get the list of directories you have previously visited. Use cd -3 to go to the third one on the list.
cd_func () { local x2 the_new_dir adir index local -i cnt if [[ $1 == "--" ]]; then dirs -v return 0 fi the_new_dir=$1 [[ -z $1 ]] && the_new_dir=$HOME if [[ ${the_new_dir:0:1} == '-' ]]; then # # Extract dir N from dirs index=${the_new_dir:1} [[ -z $index ]] && index=1 adir=$(dirs +$index) [[ -z $adir ]] && return 1 the_new_dir=$adir fi # # '~' has to be substituted by ${HOME} [[ ${the_new_dir:0:1} == '~' ]] && the_new_dir="${HOME}${the_new_dir:1}" # # Now change to the new dir and add to the top of the stack pushd "${the_new_dir}" > /dev/null [[ $? -ne 0 ]] && return 1 the_new_dir=$(pwd) # Trim down everything beyond 11th entry popd -n +11 2>/dev/null 1>/dev/null # Remove any other occurence of this dir, skipping the top of the stack for ((cnt=1; cnt <= 10; cnt++)); do x2=$(dirs +${cnt} 2>/dev/null) [[ $? -ne 0 ]] && return 0 [[ ${x2:0:1} == '~' ]] && x2="${HOME}${x2:1}" if [[ "${x2}" == "${the_new_dir}" ]]; then popd -n +$cnt 2>/dev/null 1>/dev/null cnt=cnt-1 fi done return 0 } alias cd=cd_func if [[ $BASH_VERSION > "2.05a" ]]; then # ctrl+w shows the menu bind -x "\"\C-w\":cd_func -- ;" fi
finds - find a string in common text files
Someone once told me the best software engineering tools are find and grep. I am not sure I agree, but I know that the tool I use many times a day is finds, a simple script to recursively look for text in a tree of source code, like the Linux kernel. finds looks in all common source code files (C, header, etc) for a search string. Each line that contains the search string is printed out.
Usage
finds [--dir <dir>] [-a] <search string>
finds
Here is a simplified version. You can other file extensions as needed.
#!/bin/sh # Todd Fischer, RidgeRun # # usage: finds [--dir <dir>] [-a] <search string> DIR= if [ "$1" = "--dir" ] ; then shift DIR="$2" shift CWD=`pwd` cd $DIR fi if [ "$1" = "-a" ] ; then shift; find . -follow -and \ -not -path \*svn\* -and -not -path \*\#\* -and \ -not -path \*doc\* -and \ -not -name \*~ -exec fgrep -H -i -e "$*" {} \; else find . -follow -not -path \*CVS\* -and \ -not -path \*svn\* -and -not -path \*\#\* -and \ -not -path \*/.pc/\* -and \ \( \ -name \*.c -or \ -name \*.h -or \ -name Make\* -or \ -name Config\* -or \ -name \*.html -or \ -name Kconfig -or \ -name .config -or \ -name \*.vala \ \) \ -and -not -name \*~ -exec fgrep -H -i -e "$1" {} \; fi <pre>