Jen*_*ens 43
下载zsh:
wget -O zsh.tar.xz https://sourceforge.net/projects/zsh/files/latest/download
mkdir zsh && unxz zsh.tar.xz && tar -xvf zsh.tar -C zsh --strip-components 1
cd zsh
Run Code Online (Sandbox Code Playgroud)
您可以自己编译zsh,例如:
./configure --prefix=$HOME
make
make install
Run Code Online (Sandbox Code Playgroud)
然后显式地启动它,或者从当前shell的启动文件(放在exec $HOME/bin/zsh -l
正确的位置)以编程方式启动它.
您可以尝试该chsh
命令.你确定远程计算机上没有安装zsh吗?如果没有,你可以这样做(引自zsh FAQ Section 1.7)
基本思想是使用exec用zsh替换当前shell.通常你可以在登录文件中执行此操作,例如.profile(如果你的shell是sh或ksh)或.login(如果它是csh).在尝试之前确保你有一些改变文件的方法(例如通过FTP),因为exec通常是相当无情的.
如果在主目录的子目录bin中有zsh,请将其放在.profile中:
[ -f $HOME/bin/zsh ] && exec $HOME/bin/zsh -l
Run Code Online (Sandbox Code Playgroud)
或者如果您的登录shell是csh或tcsh,请将其放在.login中:
if ( -f ~/bin/zsh ) exec ~/bin/zsh -l
Run Code Online (Sandbox Code Playgroud)
(在每种情况下,-l告诉zsh它是一个登录shell).
如果你想在确认之前检查这个是否有用,你可以让登录shell询问是否执行zsh.Bourne-like shell的以下工作:
[ -f $HOME/bin/zsh ] && {
echo "Type Y to run zsh: \c"
read line
[ "$line" = Y ] && exec $HOME/bin/zsh -l
}
Run Code Online (Sandbox Code Playgroud)
对于类似C-shell的shell:
if ( -f ~/bin/zsh ) then
echo -n "Type Y to run zsh: "
if ( "$<" == Y ) exec ~/bin/zsh -l
endif
Run Code Online (Sandbox Code Playgroud)
将这个(即使没有-l)放入.cshrc也不是一个好主意,至少没有对csh应该做什么进行一些测试,因为这将导致csh的每个实例变成zsh并且会导致csh脚本(是的,不幸的是有些人写这些)不会调用csh -f
失败.如果你想让xterm运行zsh,那么在你执行zsh的同时将SHELL环境变量更改为zsh的完整路径(事实上,即使你没有使用xterm,这对于一致性也是明智的).如果你必须从你的.cshrc执行zsh,最小的安全检查是if($?prompt)exec zsh.
如果您希望登录shell在进程列表中显示为-zsh,则可以将zsh链接到-zsh(例如,通过ln -s~/bin/zsh~/bin/-zsh)并将exec更改为exec -zsh.(确保-zsh在您的路径中.)这与-l选项具有相同的效果.
脚注:如果您有root访问权限,请确保zsh在所有适当的计算机(包括NIS客户端)上的/ etc/shells中,或者您可能遇到FTP到该计算机的问题.