是否可能(以及如何)?我真的需要这个我有ssh访问权限的远程计算机(但没有root访问权限)。
答案 0 :(得分:38)
下载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
您可以自己编译zsh,例如:
./configure --prefix=$HOME
make
make install
然后显式启动它,或者从当前shell的启动文件中以编程方式启动它(将exec $HOME/bin/zsh -l
放在正确的位置)。
答案 1 :(得分:8)
您可以尝试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
或者如果您的登录shell是csh或tcsh,请将其放在.login:
中if ( -f ~/bin/zsh ) exec ~/bin/zsh -l
(在每种情况下-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
}
和类似C-shell的shell:
if ( -f ~/bin/zsh ) then
echo -n "Type Y to run zsh: "
if ( "$<" == Y ) exec ~/bin/zsh -l
endif
将这个(即使没有-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到该计算机的问题。
答案 2 :(得分:2)
如果机器上有zsh,你应该可以在交换提示时执行zsh
,如果有效,你可以尝试chsh
交换你的shell(应该没有root工作)或当您与ssh
联系时,ssh -t hostname zsh
会自动启动它。
答案 3 :(得分:-3)
在您的用户帐户目录中创建一个目录,解压缩zsh,之后使用./config
,make
和make install
。