如何更改远程服务器上的默认shell?


5

我尝试按照如何更改AWS实例上的默认shell的方式更改它, 如下所示:

chsh -s $(which zsh)

但这给了我一个错误。系统要求我使用ypchsh,但这给了我这个错误信息:

ypchsh: can't get local yp domain: Local domain name not set

我该怎么做才能将我的远程shell设置为zsh


1
这听起来好像黄页服务(yp)没有正确配置...一个丑陋的解决方法(如果zsh未在/ etc / shells中列出 - 也许你也可以检查这个)是要包含exec /bin/zsh.profile文件中(或默认shell将读取的任何文件)。
2013年

我有一个不同的用例。我想更改为特定服务器上的特定shell。我搜索了很多,直到找到这个问题。谢谢!
郝准2015年

Answers:


4

您可以联系系统管理员并询问是否应支持该系统管理员,如果是这样,他/她可以修复它。

我在不支持将shell更改为zsh的集群中所做的是(在我的内部~/.bashrc):

# if this is an interactive shell
if [[ $- == *i* ]]; then
  # if on one of those annoying hosts...
  if [[ `uname -n` == PATTERN_MATCHING_SOME_HOSTNAMES ]]; then
     # if there is actually a zsh command available
     if [[ -x `which --skip-alias zsh 2>/dev/null` ]]; then
        # avoid spawning zsh every time bash is started...
        if [ -z $ZSH_STARTED ]; then
            export ZSH_STARTED="true"
            # if the call to zsh fails, scp a different conf there
            exec zsh
        fi
     fi
  fi
fi

2
这基本上就是我在上面的评论中所说的。两个评论:(i。)您经常可以zsh在您的主目录中编译(少数依赖),因此您不必使用偶然安装的某些(古代)版本。(ii。)zsh你的代码改变exec zsh和消失是你需要注销两次的缺点!
2013年

编辑了答案,包括exec......
Francisco

我没有100%测试过,但我认为.bashrc只是在交互式shell上。交互式shell的测试不会受到影响,但理论上并不需要。(虽然ksh需要测试,我已经找到了困难的方法)
Rich Homolka 2013年

1
IIRC许多Linux发行版都将从源代码中.bashrc获取,.profile因此它也可以针对非交互式shell执行。
旧金山
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.