39

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

4

4 回答 4

71

使用以下命令下载 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正确的位置)。

于 2013-03-08T12:01:39.237 回答
10

你可以试试这个chsh命令。您确定远程计算机上没有安装 zsh 吗?如果没有,您可以这样做(引自zsh FAQ 第 1.7 节

基本思路是使用 exec 将当前的 shell 替换为 zsh。通常您可以在登录文件中执行此操作,例如 .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 的外壳:

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 -f失败的 csh 脚本(是的,不幸的是有些人会编写这些脚本)。如果您想告诉 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 问题。

于 2013-03-08T12:00:28.320 回答
2

如果机器上有zsh,你应该可以zsh在提示下执行交换,如果可行,你可以尝试chsh交换你的shell(应该在没有root的情况下工作)或者当你连接sshputssh -t hostname zsh时自动启动它。

于 2013-03-08T11:59:10.807 回答
-3

在您的用户帐户目录中创建一个目录,解压缩zsh,然后使用./config,makemake install.

于 2013-03-08T11:59:50.877 回答