没有root访问权限安装zsh?

时间:2013-03-08 11:54:23

标签: linux bash shell terminal zsh

是否可能(以及如何)?我真的需要这个我有ssh访问权限的远程计算机(但没有root访问权限)。

4 个答案:

答案 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,之后使用./configmakemake install