不使用root許可權安裝zsh和oh-my-zsh
阿新 • • 發佈:2019-02-03
問題
今天剛申請了一個伺服器賬號,登上去發現沒有zsh。
因為沒有root許可權,也就無法使用apt-get命令了。
解決思路如下:
- 編譯、安裝zsh到家目錄 (
make
時可能找不到autoconf
) - 把安裝好的zsh所在的目錄新增到
PATH
環境變數中 - 登入後自動切換到
zsh
- 安裝oh-my-zsh (不需要root)
下面是詳細過程和遇到的問題及解決方法
安裝zsh
下載原始碼:
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。這對我來說沒什麼影響。