有可能(以及如何)?对于我有 ssh 访问权限(但没有 root 访问权限)的几台远程计算机,我真的需要这个。
4 回答
使用以下命令下载 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
正确的位置)。
你可以试试这个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 问题。
如果机器上有zsh,你应该可以zsh
在提示下执行交换,如果可行,你可以尝试chsh
交换你的shell(应该在没有root的情况下工作)或者当你连接ssh
putssh -t hostname zsh
时自动启动它。
在您的用户帐户目录中创建一个目录,解压缩zsh,然后使用./config
,make
和make install
.