是否可能(以及如何)?对于具有ssh访问权限(但没有root用户访问权限)的多台远程计算机,我确实需要这样做。
您可以尝试使用该chsh
命令。您确定远程计算机上未安装zsh吗?如果没有,则可以执行此操作(引自zsh FAQ 1.7节)
基本思想是使用exec用zsh替换当前的shell。通常,您可以在.profile(如果您的shell是sh或ksh)或.login(如果是csh)之类的登录文件中执行此操作。在尝试执行此操作之前,请确保您已通过某种方式更改了文件(例如,通过FTP),因为exec通常是相当宽容的。
如果主目录的子目录中有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。对于类似伯恩的贝壳,以下工作:
[ -f $HOME/bin/zsh ] && {
echo "Type Y to run zsh: \c"
read line
[ "$line" = Y ] && exec $HOME/bin/zsh -l
}
对于类C壳:
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,则最小安全检查是如果($?prompt)exec zsh。
如果您希望登录shell以-zsh的形式出现在进程列表中,则可以将zsh链接到-zsh(例如,通过ln -s〜/ bin / zsh〜/ bin / -zsh),并将exec更改为exec -zsh。(确保-zsh在您的路径中。)这与-l选项具有相同的效果。
脚注:如果您确实具有root用户访问权限,请确保zsh进入所有适当计算机(包括NIS客户端)的/ etc / shells中,否则您可能无法使用FTP到该计算机。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句