在GNU Screen中将zsh作为默认shell加载

27

我正在使用KUbuntu 10.04 (Lucid Lynx)。我已经安装了zsh和screen。我已经将zsh设置为默认的shell,在终端的设置->编辑当前配置文件中将命令设置为zsh。 但是,当我启动screen时,bash shell被加载。如果我运行zsh命令,那么zsh会启动,但是会显示以下消息:

"/home/joel/.zshrc:36: Can't add module parameter `mapfile': parameter already exists"

此外,zsh仅为当前屏幕实例调用,我必须手动再次调用它以进行其他实例。 那么,有没有办法使屏幕默认加载zsh,并自动调用每个实例?

谢谢


5
适合放在superuser.com上。 - Paul R
2
请发布 ~/.zshrc 的内容。 - Dennis Williamson
尝试清空您的~/.zshrc文件或者将其重命名。 - rampion
3个回答

69

如果你想将其作为screen会话的默认shell,你可以将以下这行添加到你的 ~/.screenrc 文件中。

shell "/usr/bin/zsh"

6
我认为了解 ~/.screenrc 文件只有在您创建它之后才存在是很有帮助的。我不得不创建这个文件,并在其中加入 shell "/usr/bin/zsh" 才能使它起作用。链接 - Slothworks

8

首先要定位zsh的位置,方法如下:

$ whereis zsh

切换当前用户的Shell:

$ chsh -s /path/to/zsh joel

重新登录后,zsh 将成为用户 Joel 的默认 shell。

谢谢回复。whereis zsh 给出 sh: /bin/zsh /usr/bin/zsh /etc/zsh /usr/lib/zsh /usr/share/zsh /usr/share/man/man1/zsh.1.gz。但是当我执行 chsh -s {/bin/zsh} joel 时,它会要求输入密码,然后我会收到消息“chsh:{ /bin/zsh } 是无效的 shell。” - joel
1
chsh -s /bin/zsh joel - 这就是你需要的! :) - mosg
哎呀,你说得对,谢谢,它起作用了!但是当我启动屏幕时,我仍然会收到“无法添加模块参数'mapfile':参数已经存在”的消息。有什么办法可以解决这个问题吗? - joel
我认为Dennis是正确的,你需要在你的问题中添加*~/.zshrc*文件... - mosg

3

我有一个与你类似的问题,但我的情况是我改变了vim使用的shell,在.vimrc中指定set shell=zsh\ --login。每次我通过:sh进入shell时,zsh都会出现相同的错误:

Can't add module parameter `mapfile': parameter already exists

我在freenode的#vim和#zsh上提问。结果发现如果你在zsh会话中再次运行zsh,你会看到相同的错误,并且建议的修复方法是将&>/dev/null简单地添加到您的.zshrc文件中,如下所示:

zmodload -ap zsh/mapfile mapfile &>/dev/null

zsh的mapfile模块创建了一个伪变量,将文件名映射到它们的内容,只有在实际使用$mapfile的脚本中才需要使用该模块。

它似乎是可选的,但是有人指出autoload参数存在,所以只有在需要时才会加载,因此保留该行并将投诉输出到/dev/null应该没有问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接