Most Android mobiles are running on the ARM architecture. Therefore you have to use a special compiler for such binaries. The Android SDK built in adb shell has no auto completion, which is really a nightmare in my opinion. Therefore I was looking for a way to compile bash for Android. Altough a lot of tutorials tell you to download the CodeSourcery cross-compiling toolchain, they are not really necessary (at least if you do a static compile like I do here).
I wrote a script that compiles bash-4.0. Should work out-of-the-box in Ubuntu 11.04. Edit: By now I’ve also put it on github: https://github.com/floyd-fuh/ARM-cross-compile
#!/bin/bash #BASH source code from http://ftp.gnu.org/gnu/bash/ #Example for compiling bash on Ubuntu 11.04 #Warnings during the compilation process seem to be alright, errors would be bad BASH_VERSION="bash-4.1" echo "[INFO] Checking if packages installed" dpkg --status autoconf | grep -q not-installed if [ $? -eq 0 ]; then echo "[INFO] Apt-get installing autoconf, please provide sudo password" sudo apt-get install autoconf else echo "[INFO] autoconf already installed, good" fi dpkg --status gcc-arm-linux-gnueabi | grep -q not-installed if [ $? -eq 0 ]; then echo "[INFO] Apt-get installing gcc-arm-linux-gnueabi, please provide sudo password" sudo apt-get install gcc-arm-linux-gnueabi else echo "[INFO] gcc-arm-linux-gnueabi already installed, good" fi echo "[INFO] Starting bash source code download" wget http://ftp.gnu.org/gnu/bash/$BASH_VERSION.tar.gz tar xvfz $BASH_VERSION.tar.gz cd $BASH_VERSION CC=`which arm-linux-gnueabi-gcc` ./configure --host=arm-linux-gnueabi --enable-static-link --without-bash-malloc make clean make file bash | grep -q ARM if [ ! $? -eq 0 ]; then echo "[ERROR] Looks like bash was incorrectly compiled with another compler than arm-linux-gnueabi-gcc" echo "[ERROR] The resulting bash binary will not run on ARM, therefore aborting!" exit fi arm-linux-gnueabi-strip -o bash-stripped -s bash cp ./bash-stripped ../bash cd .. file bash echo "[INFO] Your bash binary is finished (file 'bash' in current directory), happy autocompleting on ARM!"
By changing the variable BASH_VERSION to bash-4.1 you should be able to compile an even newer version. Bash-4.2 did not work for me.