1
0
mirror of https://github.com/wting/autojump synced 2024-10-27 20:34:07 +00:00

Merge pull request #95 from wting/bash-install-local

bash: local installation
This commit is contained in:
Joel Schaerer 2012-02-07 22:58:59 -08:00
commit 8c546913e3
2 changed files with 110 additions and 93 deletions

View File

@ -16,21 +16,12 @@
#along with autojump. If not, see <http://www.gnu.org/licenses/>. #along with autojump. If not, see <http://www.gnu.org/licenses/>.
function show_help { function show_help {
echo "sudo ./install.sh [--prefix /usr/local]" echo "sudo ./install.sh [--local] [--prefix /usr/local]"
}
function die {
echo "$@" >&2
exit 1
}
function warn {
echo "WARNING: $@" >&2
} }
# Default install directory. # Default install directory.
prefix=/usr prefix=/usr
profile_d=/etc/profile.d local=
user=${SUDO_USER:-${USER}} user=${SUDO_USER:-${USER}}
OS=`uname` OS=`uname`
@ -40,25 +31,48 @@ if [ $OS == 'Darwin' ]; then
else else
user_home=$(getent passwd ${user} | cut -d: -f6) user_home=$(getent passwd ${user} | cut -d: -f6)
fi fi
bashrc_file=${user_home}/.bashrc bashrc_file=${user_home}/.bashrc
# Command line parsing # Command line parsing
while true; do while true; do
case "$1" in case "$1" in
-h|--help|-\?) show_help; exit 0;; -h|--help|-\?)
-p|--prefix) if [ $# -gt 1 ]; then show_help;
prefix=$2; shift 2 exit 0
profile_d=$prefix/etc/autojump ;;
else -l|--local)
die "--prefix or -p require an argument" local=true
fi ;; prefix=~/.autojump
--) shift; break;; shift
-*) echo "invalid option: $1" 1>&2; show_help; exit 1;; ;;
*) break;; -p|--prefix)
if [ $# -gt 1 ]; then
prefix=$2; shift 2
else
die "--prefix or -p require an argument"
fi
;;
--)
shift
break
;;
-*)
echo "invalid option: $1" 1>&2;
show_help;
exit 1
;;
*)
break
;;
esac esac
done done
echo "Installing to ${prefix} ..." if [[ ${UID} != 0 ]] && [ ! ${local} ]; then
echo "Please rerun as root or use the --local option."
exit 1
fi
echo -e "Installing files to ${prefix} ...\n"
# add git revision to autojump # add git revision to autojump
./git-version.sh ./git-version.sh
@ -67,58 +81,40 @@ echo "Installing to ${prefix} ..."
mkdir -p ${prefix}/share/autojump/ mkdir -p ${prefix}/share/autojump/
mkdir -p ${prefix}/bin/ mkdir -p ${prefix}/bin/
mkdir -p ${prefix}/share/man/man1/ mkdir -p ${prefix}/share/man/man1/
cp icon.png ${prefix}/share/autojump/ cp -v icon.png ${prefix}/share/autojump/
cp jumpapplet ${prefix}/bin/ cp -v jumpapplet ${prefix}/bin/
cp autojump ${prefix}/bin/ cp -v autojump ${prefix}/bin/
cp autojump.1 ${prefix}/share/man/man1/ cp -v autojump.1 ${prefix}/share/man/man1/
mkdir -p "$profile_d" if [ ! ${local} ]; then
if [ ! -d "$profile_d" ] if [ -d "/etc/profile.d" ]; then
then cp -v autojump.bash /etc/profile.d/
warn "$profile_d does not exist, and I can't create it." cp -v autojump.sh /etc/profile.d/
fi
if [ -d "$profile_d" ]; then echo
cp autojump.bash $profile_d/ echo "Add the following lines to your ~/.bashrc:"
cp autojump.sh $profile_d/ echo
echo -e "\tsource ${prefix}/etc/profile.d/autojump.bash"
# Make sure that the code we just copied has been sourced. echo
# check if .bashrc has sourced /etc/profile or $profile_d/autojump.bash echo "You need to source your ~/.bashrc (source ~/.bashrc) before you can start using autojump."
if [ `grep -c "^[[:space:]]*\(source\|\.\) /etc/profile\(\.d/autojump\.bash\)[[:space:]]*$" ${bashrc_file}` -eq 0 ]; then echo
echo "Your .bashrc doesn't seem to source /etc/profile or $profile_d/autojump.bash" echo "To remove autojump, delete the ${prefix} directory and relevant lines from ~/.bashrc."
echo "Adding the $profile_d/autojump.bash to your .bashrc" echo
echo "" >> ${bashrc_file} else
echo "# Added by autojump install.sh" >> ${bashrc_file} echo "Your distribution does not have a '/etc/profile.d/' directory, please create it manually or use the local install option."
echo "source $profile_d/autojump.bash" >> ${bashrc_file}
fi fi
echo "Done!" else
mkdir -p ${prefix}/etc/profile.d/
cp -v autojump.bash ${prefix}/etc/profile.d/
cp -v autojump.sh ${prefix}/etc/profile.d/
echo
echo "Add the following lines to your ~/.bashrc:"
echo
echo -e "\tsource ${prefix}/etc/profile.d/autojump.bash"
echo echo
echo "You need to source your ~/.bashrc (source ~/.bashrc) before you can start using autojump." echo "You need to source your ~/.bashrc (source ~/.bashrc) before you can start using autojump."
else echo
echo "Your distribution does not have a $profile_d directory, the default that we install one of the scripts to. Would you like us to copy it into your ~/.bashrc file to make it work? (If you have done this once before, delete the old version before doing it again.) [y/n]" echo "To remove autojump, delete the ${prefix} directory and relevant lines from ~/.bashrc."
read ans echo
if [ ${#ans} -gt 0 ]; then
if [ $ans = "y" -o $ans = "Y" -o $ans = "yes" -o $ans = "Yes" ]; then
# Answered yes. Go ahead and add the autojump code
echo "" >> ${bashrc_file}
echo "#autojump" >> ${bashrc_file}
cat autojump.bash | grep -v "^#" >> ${bashrc_file}
# Since OSX uses .bash_profile, we need to make sure that .bashrc is properly sourced.
# Makes the assumption that if they have a line: source ~/.bashrc or . ~/.bashrc, that
# .bashrc has been properly sourced and you don't need to add it.
if [ $OS == 'Darwin' -a x`grep -c "^[[:space:]]*\(source\|\.\) ~/\.bashrc[[:space:]]*$" ~/.bash_profile` == x0 ]; then
echo "You are using OSX and your .bash_profile doesn't seem to be sourcing .bashrc"
echo "Adding source ~/.bashrc to your bashrc"
echo -e "\n# Get the aliases and functions" >> ~/.bash_profile
echo -e "if [ -f ${bashrc_file} ]; then\n . ${bashrc_file}\nfi" >> ~/.bash_profile
fi
echo "You need to source your ~/.bashrc (source ~/.bashrc) before you can start using autojump."
else
echo "Then you need to put autojump.sh, or the code from it, somewhere where it will get read. Good luck!"
fi
else
echo "Then you need to put autojump.sh, or the code from it, somewhere where it will get read. Good luck!"
fi
fi fi

View File

@ -30,33 +30,54 @@ if [ $OS == 'Darwin' ]; then
else else
user_home=$(getent passwd ${user} | cut -d: -f6) user_home=$(getent passwd ${user} | cut -d: -f6)
fi fi
bashrc_file=${user_home}/.bashrc bashrc_file=${user_home}/.bashrc
# Command line parsing # Command line parsing
while true; do while true; do
case "$1" in case "$1" in
-h|--help|-\?) show_help; exit 0;; -h|--help|-\?) show_help; exit 0;;
-p|--prefix) if [ $# -gt 1 ]; then -p|--prefix)
prefix=$2; shift 2 if [ $# -gt 1 ]; then
else prefix=$2; shift 2
echo "--prefix or -p require an argument" 1>&2 else
exit 1 echo "--prefix or -p require an argument" 1>&2
fi ;; exit 1
--) shift; break;; fi
-*) echo "invalid option: $1" 1>&2; show_help; exit 1;; ;;
*) break;; --) shift; break;;
-*) echo "invalid option: $1" 1>&2; show_help; exit 1;;
*) break;;
esac esac
done done
echo -e "Uninstalling from ${prefix} ...\n"
# UNINSTALL AUTOJUMP # UNINSTALL AUTOJUMP
sudo rm -rv ${prefix}/share/autojump/ # global / custom location installations
sudo rm -v ${prefix}/bin/jumpapplet if [ -d "${prefix}/share/autojump/" ]; then
sudo rm -v ${prefix}/bin/autojump echo -e "\nUninstalling from ${prefix} ...\n"
sudo rm -v ${prefix}/share/man/man1/autojump.1 sudo rm -rv ${prefix}/share/autojump/
sudo rm -v /etc/profile.d/autojump.bash sudo rm -v ${prefix}/bin/jumpapplet
sudo rm -v /etc/profile.d/autojump.sh sudo rm -v ${prefix}/bin/autojump
sudo rm -v ${prefix}/share/man/man1/autojump.1
sudo rm -v /etc/profile.d/autojump.bash
sudo rm -v /etc/profile.d/autojump.sh
echo -e "\nPlease remove the line from ${bashrc_file} :\n" echo
echo -e "\tsource /etc/profile.d/autojump.bash" echo "Please remove the line from ${bashrc_file} :"
echo
echo -e "\tsource /etc/profile.d/autojump.bash"
echo
fi
# local installations
if [ -d ~/.autojump/ ]; then
echo
echo "Uninstalling from ~/.autojump/ ..."
echo
rm -rv ~/.autojump/
echo
echo "Please remove the line from ${bashrc_file} :"
echo
echo -e "\tsource ~/.autojump/profile.d/autojump.bash"
echo
fi