Kushal Das4

FOSS and life. Kushal Das talks here.

History meme

[kd@kdlappy ~]$ history | awk ‘{a[$2]++ } END{for(i in a){print a[i] “ ” i}}‘|sort -rn|head 212 vi 140 cd 102 ls 83 git 69 python 33 sudo 27 cat 26 tail 24 su 18 javac

cd revisited

Few days back wrote a function ‘cd’, which later found is not correct. So, came up with a smaller one with no problem (till now :) ).

cd ()
{
if [ “$#” -eq “0” ]
then
    if [ “$eFlag” -eq “1” ]
    then
        changePath
        export eFlag=0
    fi
    builtin cd
else
    builtin cd “$1”
    dname=pwd
    bname=echo "$dname"|grep pyqt4
    if [ “$bname” != “$dname” ]
    then
           if [ “$eFlag” -eq “1” ]
           then
                changePath
                export eFlag=0
           fi
     else
           if [ “$eFlag” -eq “0” ]
           then
                QTDIR=/home/kdedev/src/kde/qt-copy
                PATH=$QTDIR/bin:$PATH
                MANPATH=$QTDIR/doc/man:$MANPATH
                LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
                PKG_CONFIG_PATH=$QTDIR/lib/pkgconfig:$PKG_CONFIG_PATH
                QTINC=$QTDIR/include
                QTLIB=$QTDIR/lib
                export QTDIR PATH MANPATH LD_LIBRARY_PATH PKG_CONFIG_PATH QTINC QTLIB
                export eFlag=1
            fi
     fi
fi
}
Total code can be found here.

Shell scripts and me

I always feared shell scripts when I was in college. Always knew that it is very powerful if I use it properly, I never did.

Two days back, in I was trying to help one of my college junior to setup Qt4 and the environment to run it. I told him to follow this page. But Pradeepto said the idea of having another user is not so good. and he said:

Apr 30 00:48:21 pradeepto: you can even do make sure that as you changedirectories,
the env-vars are set automagically.
So, I tried to something like that, asked few questions on #bash about how to write a function with same name of a shell command and then call the actual shell command. So, got the shell-builtin-command ‘builtin’ which executes other shell builtins. Also asked lots of questions to Jace about shell programming :p

My target was, as I change my directory to any directory named ‘pyqt4’ or sub-directories under it all environment variables should change accordingly to run Qt4 or PyQt4 codes and in other directories the normal environment should stay to run Qt3 :)

The result in my .bashrc :

export tQTDIR=“$QTDIR”

export tPATH=“$PATH”

export tMANPATH=“$MANPATH”

export tLD_LIBRARY_PATH=“$LD_LIBRARY_PATH”

export tPKG_CONFIG_PATH=“$PKG_CONFIG_PATH”

export tQTINC=“$QTINC”

export tQTLIB=“$QTLIB”

export eFlag=0changePath()

changePath()
{QTDIR=“$tQTDIR”

PATH=“$tPATH”

MANPATH=“$tMANPATH”

LD_LIBRARY_PATH=“$tLD_LIBRARY_PATH”

PKG_CONFIG_PATH=“$tPKG_CONFIG_PATH”

QTLIB=“$tQTLIB”

QTINC=“$tQTINC”

export QTDIR PATH MANPATH LD_LIBRARY_PATH PKG_CONFIG_PATH QTINC QTLIB

}

cd ()

{

if [ “$#” -eq “0” ]

then

if [ “$eFlag” -eq “1” ]

then

changePath

export eFlag=0

fi

builtin cd

else

bname=echo "$1"|grep pyqt4

if [ “${bname}” = “$1” ]

then

QTDIR=/home/kdedev/src/kde/qt-copy

PATH=$QTDIR/bin:$PATH

MANPATH=$QTDIR/doc/man:$MANPATH

LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH

PKG_CONFIG_PATH=$QTDIR/lib/pkgconfig:$PKG_CONFIG_PATH

QTINC=$QTDIR/include

QTLIB=$QTDIR/lib

export QTDIR PATH MANPATH LD_LIBRARY_PATH PKG_CONFIG_PATH QTINC QTLIB

export eFlag=1

builtin cd “$1”

else

if [ “$1” = “..” ]

then

builtin cd “$1”

dname=pwd

bname=echo "$dname"|grep pyqt4

if [ “$bname” != “$dname” ]

then

if [ “$eFlag” -eq “1” ]

then

changePath

export eFlag=0

fi

fi

else

if [ “$eFlag” -eq “1” ]

then

changePath

export eFlag=0

fi

builtin cd “$1”

fi

fi

fi

}

I think the code is not so much readable in my blog :)

Update: Pradeepto asked me to upload the code as a file, so here it is. Just copy paste the contents of this file into your $HOME/.bashrc .