my user ~/bin folder is not working

I'm running 12.04

I have two files

/usr/bin/uim-tomoe-gtk  
~/bin/uim-tomoe-gtk

the first is the tomoe kanji program
the second is a script that runs kanjipad instead

#!/bin/bash
exec kanjipad $@
exit 0

I expect to now be able to type uim-tomoe-gtk into the terminal and get my kanjipad application to start up. But the uim-tomoe-gtk program comes up instead.

What am I doing wrong or what information do I need to provide?


There are two things you need to do.

Firstly, the shell will not get ~/bin/ in $PATH when you login if it does not exist. You will have to log out and log in again after creating the directory, or start a new login shell with:

/bin/bash -l

or add ~/bin to your path manually with:

export PATH=/home/user/bin:$PATH

Secondly, the shell keeps a cache of where programs are located. If you create a script in ~/bin/ (or /usr/local/) which shadows something in /usr/ then you must manually update the cache. You can clear it completely with this command which should do the trick:

hash -r

The problem is probably that /usr/bin is ahead of ~/bin in your PATH, or ~/bin isn't in your PATH at all.

To fix, put this line at the end of your .bash_profile file:

export PATH=~/bin:$PATH

Be warned, though, that this will do the same thing for other scripts in your ~/bin folder. For example if you have /usr/bin/example_command and ~/bin/example_command, the command in your home directory will take precedence.

Honestly, I would just rename the script.