ohmyzsh/tools/install.sh
William Woodall 7791d51142 install.sh: fail gracefully when zsh is not installed
This is in response to #3360.

Basically this changes two things:

- It prints out `Running: chsh -s /bin/zsh` right before running `chsh` so if that fails the user can fix the problem and copy-paste, try again.
- If zsh is not installed it tells the user this and then instructs the user to install zsh then run `` chsh -s `which zsh` `` afterwards.

In the latter case it exits afterwards to prevent the next step from failing, i.e. `env zsh`.

This could be improved on by restructuring the logic further and bailing out earlier when `zsh` is not installed, similar to how it handles `git` not being available. However, this is still better than the current behavior of `chsh` failing and the install stopping in the middle:

```
$ curl -L http://install.ohmyz.sh | sh
[...]
Cloning Oh My Zsh...
Cloning into '/home/user/.oh-my-zsh'...
[...]
Looking for an existing zsh config...
Using the Oh My Zsh template file and adding it to ~/.zshrc
Copying your current PATH and adding it to the end of ~/.zshrc for you.
Time to change your default shell to zsh!
chsh: option requires an argument -- 's'
Usage: chsh [options] [LOGIN]

Options:
  -h, --help                    display this help message and exit
  -s, --shell SHELL             new login shell for the user account

```
2015-04-21 20:01:41 -07:00

58 lines
2.2 KiB
Bash
Executable file

set -e
if [ ! -n "$ZSH" ]; then
ZSH=~/.oh-my-zsh
fi
if [ -d "$ZSH" ]; then
echo "\033[0;33mYou already have Oh My Zsh installed.\033[0m You'll need to remove $ZSH if you want to install"
exit
fi
echo "\033[0;34mCloning Oh My Zsh...\033[0m"
hash git >/dev/null 2>&1 && env git clone --depth=1 https://github.com/robbyrussell/oh-my-zsh.git $ZSH || {
echo "git not installed"
exit
}
echo "\033[0;34mLooking for an existing zsh config...\033[0m"
if [ -f ~/.zshrc ] || [ -h ~/.zshrc ]; then
echo "\033[0;33mFound ~/.zshrc.\033[0m \033[0;32mBacking up to ~/.zshrc.pre-oh-my-zsh\033[0m";
mv ~/.zshrc ~/.zshrc.pre-oh-my-zsh;
fi
echo "\033[0;34mUsing the Oh My Zsh template file and adding it to ~/.zshrc\033[0m"
cp $ZSH/templates/zshrc.zsh-template ~/.zshrc
sed -i -e "/^export ZSH=/ c\\
export ZSH=$ZSH
" ~/.zshrc
echo "\033[0;34mCopying your current PATH and adding it to the end of ~/.zshrc for you.\033[0m"
sed -i -e "/export PATH=/ c\\
export PATH=\"$PATH\"
" ~/.zshrc
if [ "$SHELL" != "$(which zsh)" ]; then
zsh --version > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "\033[0;34mTime to change your default shell to zsh!\033[0m"
echo "\033[0;34mRunning:\033[0;1m chsh -s `which zsh`\033[0m"
chsh -s `which zsh`
else
echo "\033[0;33mzsh does not appear to be installed.\033[0m"
echo "\033[0;33mPlease install \033[0;1mzsh\033[0;33m and then run:\033[0;1m chsh -s \`which zsh\`\033[0m"
exit
fi
fi
echo "\033[0;32m"' __ __ '"\033[0m"
echo "\033[0;32m"' ____ / /_ ____ ___ __ __ ____ _____/ /_ '"\033[0m"
echo "\033[0;32m"' / __ \/ __ \ / __ `__ \/ / / / /_ / / ___/ __ \ '"\033[0m"
echo "\033[0;32m"'/ /_/ / / / / / / / / / / /_/ / / /_(__ ) / / / '"\033[0m"
echo "\033[0;32m"'\____/_/ /_/ /_/ /_/ /_/\__, / /___/____/_/ /_/ '"\033[0m"
echo "\033[0;32m"' /____/ ....is now installed!'"\033[0m"
echo "\n\n \033[0;32mPlease look over the ~/.zshrc file to select plugins, themes, and options.\033[0m"
echo "\n\n \033[0;32mp.s. Follow us at http://twitter.com/ohmyzsh.\033[0m"
echo "\n\n \033[0;32mp.p.s. Get stickers and t-shirts at http://shop.planetargon.com.\033[0m"
env zsh
. ~/.zshrc