没有root访问权限安装zsh?

Joo*_*ooj 25 linux bash shell terminal zsh

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

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正确的位置)以编程方式启动它.


pra*_*ala 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
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到该计算机的问题.