问题
今天刚申请了一个服务器账号,登上去发现没有zsh。
因为没有root权限,也就无法使用apt-get命令了。
解决思路如下:
- 编译、安装zsh到家目录 (
make
时可能找不到autoconf
) - 把安装好的zsh所在的目录添加到
PATH
环境变量中 - 登录后自动切换到
zsh
- 安装oh-my-zsh (不需要root)
下面是详细过程和遇到的问题及解决方法
安装zsh
官方文档:http://zsh.sourceforge.net/FAQ/zshfaq01.html
下载源码:
wget -O zsh.tar.xz https://sourceforge.net/projects/zsh/files/latest/download
解压:(注意,下载下来的文件是xz格式的)
xz -d zsh.tar.xz # 会把xz文件解压成tar文件
mkdir zsh # 建立目录用来保存zsh源码
tar -xvf zsh.tar -C zsh --strip-components 1 # 解压tar文件到zsh目录
编译:
./configure --prefix=$HOME #表示安装到家目录
make
make install
如果遇到找不到 autoconf
的错误,则需要手动安装。
编译、安装autoconf到家目录:
wget http://ftp.gnu.org/gnu/autoconf/autoconf-latest.tar.gz
mkdir autoconf-soruce
tar -zxvf autoconf-latest.tar.gz -C autoconf-soruce/ --strip-components 1
cd autoconf-soruce/
./configure --prefix=$HOME # 安装到家目录
make
make install
更新PATH
这样以来 zsh
安装到 $HOME/bin
下面,并且会自动添加环境变量,但是重新登陆后就找不到了。
所以记得手动更新 PATH
,我是选择写入 ~/.bash_profile
文件。
echo 'export PATH="$HOME/bin:$HOME/.local/bin:$PATH"' >> ~/.bash_profile
这样操作之后就可以在命令行使用 zsh
了,但是不会默认使用 zsh
作为交互程序。
两条思路:
- 使用chsh (可以尝试,但是我失败了,因为没有权限写入
/etc/shells
) - 修改启动脚本,自动切换到
zsh
(官方推荐的方式)
我还是选择写入 ~/.bash_profile
文件:
echo '[ -f $HOME/bin/zsh ] && exec $HOME/bin/zsh -l' >> ~/.bash_profile
安装oh-my-zsh
一行代码搞定:
wget https://github.com/robbyrussell/oh-my-zsh/raw/master/tools/install.sh -O - | sh
值得注意的是上述脚本的一段代码:
TEST_CURRENT_SHELL=$(expr "$SHELL" : '.*/\(.*\)')
if [ "$TEST_CURRENT_SHELL" != "zsh" ]; then
# If this platform provides a "chsh" command (not Cygwin), do it, man!
if hash chsh >/dev/null 2>&1; then
printf "${BLUE}Time to change your default shell to zsh!${NORMAL}\n"
chsh -s $(grep /zsh$ /etc/shells | tail -1)
# Else, suggest the user do so manually.
else
printf "I can't change your shell automatically because this system does not have chsh.\n"
printf "${BLUE}Please manually change your default shell to zsh!${NORMAL}\n"
fi
fi
干了啥?如果系统默认shell不是zsh的话,会尝试使用 chsh
命令切换到 /etc/shells
列表里的 zsh
,如果切换失败就会提示错误。
有什么影响?如果全局已经有zsh的情况下,这个脚本会主动把默认shell切换成全局的zsh,而不会使用本地的zsh。这对我来说没什么影响。