Ubuntu Zsh(通过Vagrant)无法定位Zsh或其函数。

5

我有一个 Vagrant 配置脚本,它会自动安装 Zsh(如果尚未安装),然后将 shell 更改为使用 Zsh。

我认为存在两个问题:

首先,我不认为 shell 已更改为 Zsh,因为当我运行 vagrant ssh 访问 Ubuntu 虚拟机并输入 ps -p $$ 命令时,该命令显示 Bash 是运行的 shell,而不是 Zsh(我原本期望应该是 Zsh)。

第二个问题是,如果它确实已更改为 Zsh shell (无论 ps -p $$ 返回了什么),那么当我 source .zshrc 文件时,Zsh 显示了许多错误,这些错误表明指定的函数缺失或者没有被正确引用。


我将分步骤进行说明,手动安装 Zsh 而不是通过 Vagrant 配置脚本...

  1. cat /etc/shells -> 我看不到任何关于 Zsh† 的信息
  2. sudo apt-get update
  3. sudo apt-get install zsh
  4. cat /etc/shells -> 现在有了 /bin/zsh/usr/bin/zsh
  5. which zsh -> /usr/bin/zsh
  6. zsh --version -> zsh 5.0.2 (x86_64-pc-linux-gnu)
  7. chsh -s $(which zsh)
  8. source .zshrc -> 很多错误信息被发送到 stdout~~
  9. tree /usr/share/zsh/ -> 下面是输出,但是注意到 function 目录不在 5.0.2 目录中?

我认为更可能的情况是 Zsh 没有被更改,因为如果我执行命令 zsh,那么我将进入一个新的 shell 环境,如果我然后运行 source .zshrc,我将不会遇到任何错误。此外,如果我现在运行 ps -p $$,我将看到报告 Zsh 作为正在运行的 shell。

完整的 Vagrant 配置脚本可以在本问题底部找到。

† 我看到的 shell 列表如下:

/bin/sh
/bin/dash
/bin/bash
/bin/rbash
/usr/bin/tmux
/usr/bin/screen

≠ 的输出结果是:

Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following extra packages will be installed:
  zsh-common
Suggested packages:
  zsh-doc
The following NEW packages will be installed:
  zsh zsh-common
0 upgraded, 2 newly installed, 0 to remove and 55 not upgraded.
Need to get 2,726 kB of archives.
After this operation, 11.4 MB of additional disk space will be used.
Do you want to continue? [Y/n] Y
Get:1 http://archive.ubuntu.com/ubuntu/ trusty/main zsh-common all 5.0.2-3ubuntu6 [2,119 kB]
Get:2 http://archive.ubuntu.com/ubuntu/ trusty/main zsh amd64 5.0.2-3ubuntu6 [607 kB]
Fetched 2,726 kB in 6s (420 kB/s)                                              
Selecting previously unselected package zsh-common.
(Reading database ... 61742 files and directories currently installed.)
Preparing to unpack .../zsh-common_5.0.2-3ubuntu6_all.deb ...
Unpacking zsh-common (5.0.2-3ubuntu6) ...
Selecting previously unselected package zsh.
Preparing to unpack .../zsh_5.0.2-3ubuntu6_amd64.deb ...
Unpacking zsh (5.0.2-3ubuntu6) ...
Processing triggers for man-db (2.6.7.1-1) ...
Setting up zsh-common (5.0.2-3ubuntu6) ...
Setting up zsh (5.0.2-3ubuntu6) ...
update-alternatives: using /bin/zsh5 to provide /bin/zsh (zsh) in auto mode
update-alternatives: using /bin/zsh5 to provide /bin/rzsh (rzsh) in auto mode
update-alternatives: warning: skip creation of /usr/share/man/man1/rzsh.1.gz because associated file /usr/share/man/man1/zsh.1.gz (of link group rzsh) doesn't exist

以下是错误列表,您可以在此处查看Zsh配置文件https://github.com/Integralist/dotfiles/blob/linux/.zshrc

autoload: command not found
zmodload: command not found
No command 'zstyle' found, did you mean:
 Command 'style' from package 'diction' (universe)
 Command 'astyle' from package 'astyle' (universe)
zstyle: command not found
No command 'zstyle' found, did you mean:
 Command 'astyle' from package 'astyle' (universe)
 Command 'style' from package 'diction' (universe)
zstyle: command not found
No command 'zstyle' found, did you mean:
 Command 'astyle' from package 'astyle' (universe)
 Command 'style' from package 'diction' (universe)
zstyle: command not found
No command 'zstyle' found, did you mean:
 Command 'style' from package 'diction' (universe)
 Command 'astyle' from package 'astyle' (universe)
zstyle: command not found
No command 'zstyle' found, did you mean:
 Command 'style' from package 'diction' (universe)
 Command 'astyle' from package 'astyle' (universe)
zstyle: command not found
No command 'zstyle' found, did you mean:
 Command 'style' from package 'diction' (universe)
 Command 'astyle' from package 'astyle' (universe)
zstyle: command not found
No command 'zstyle' found, did you mean:
 Command 'astyle' from package 'astyle' (universe)
 Command 'style' from package 'diction' (universe)
zstyle: command not found
No command 'zstyle' found, did you mean:
 Command 'astyle' from package 'astyle' (universe)
 Command 'style' from package 'diction' (universe)
zstyle: command not found
No command 'zstyle' found, did you mean:
 Command 'astyle' from package 'astyle' (universe)
 Command 'style' from package 'diction' (universe)
zstyle: command not found
No command 'zstyle' found, did you mean:
 Command 'style' from package 'diction' (universe)
 Command 'astyle' from package 'astyle' (universe)
zstyle: command not found
No command 'zstyle' found, did you mean:
 Command 'astyle' from package 'astyle' (universe)
 Command 'style' from package 'diction' (universe)
zstyle: command not found
No command 'zstyle' found, did you mean:
 Command 'style' from package 'diction' (universe)
 Command 'astyle' from package 'astyle' (universe)
zstyle: command not found
No command 'zstyle' found, did you mean:
 Command 'style' from package 'diction' (universe)
 Command 'astyle' from package 'astyle' (universe)
zstyle: command not found
No command 'zstyle' found, did you mean:
 Command 'style' from package 'diction' (universe)
 Command 'astyle' from package 'astyle' (universe)
zstyle: command not found
No command 'zstyle' found, did you mean:
 Command 'astyle' from package 'astyle' (universe)
 Command 'style' from package 'diction' (universe)
zstyle: command not found
No command 'zstyle' found, did you mean:
 Command 'astyle' from package 'astyle' (universe)
 Command 'style' from package 'diction' (universe)
zstyle: command not found
No command 'zstyle' found, did you mean:
 Command 'style' from package 'diction' (universe)
 Command 'astyle' from package 'astyle' (universe)
zstyle: command not found
No command 'zstyle' found, did you mean:
 Command 'astyle' from package 'astyle' (universe)
 Command 'style' from package 'diction' (universe)
zstyle: command not found
No command 'zstyle' found, did you mean:
 Command 'style' from package 'diction' (universe)
 Command 'astyle' from package 'astyle' (universe)
zstyle: command not found
No command 'zstyle' found, did you mean:
 Command 'style' from package 'diction' (universe)
 Command 'astyle' from package 'astyle' (universe)
zstyle: command not found
No command 'zstyle' found, did you mean:
 Command 'astyle' from package 'astyle' (universe)
 Command 'style' from package 'diction' (universe)
zstyle: command not found
No command 'zstyle' found, did you mean:
 Command 'style' from package 'diction' (universe)
 Command 'astyle' from package 'astyle' (universe)
zstyle: command not found
No command 'zstyle' found, did you mean:
 Command 'astyle' from package 'astyle' (universe)
 Command 'style' from package 'diction' (universe)
zstyle: command not found
No command 'zstyle' found, did you mean:
 Command 'astyle' from package 'astyle' (universe)
 Command 'style' from package 'diction' (universe)
zstyle: command not found
No command 'zstyle' found, did you mean:
 Command 'astyle' from package 'astyle' (universe)
 Command 'style' from package 'diction' (universe)
zstyle: command not found
bindkey: command not found
bindkey: command not found
bindkey: command not found
bindkey: command not found
bindkey: command not found
bindkey: command not found
bindkey: command not found
autoload: command not found
No command 'colors' found, did you mean:
 Command 'xcolors' from package 'xcolors' (universe)
colors: command not found
-bash: %{$fg_no_bold[${(L)COLOR}]%}: bad substitution
-bash: %{$fg_bold[${(L)COLOR}]%}: bad substitution
-bash: %{$fg_no_bold[${(L)COLOR}]%}: bad substitution
-bash: %{$fg_bold[${(L)COLOR}]%}: bad substitution
-bash: %{$fg_no_bold[${(L)COLOR}]%}: bad substitution
-bash: %{$fg_bold[${(L)COLOR}]%}: bad substitution
-bash: %{$fg_no_bold[${(L)COLOR}]%}: bad substitution
-bash: %{$fg_bold[${(L)COLOR}]%}: bad substitution
-bash: %{$fg_no_bold[${(L)COLOR}]%}: bad substitution
-bash: %{$fg_bold[${(L)COLOR}]%}: bad substitution
-bash: %{$fg_no_bold[${(L)COLOR}]%}: bad substitution
-bash: %{$fg_bold[${(L)COLOR}]%}: bad substitution
-bash: %{$fg_no_bold[${(L)COLOR}]%}: bad substitution
-bash: %{$fg_bold[${(L)COLOR}]%}: bad substitution
-bash: %{$fg_no_bold[${(L)COLOR}]%}: bad substitution
-bash: %{$fg_bold[${(L)COLOR}]%}: bad substitution
No command 'setopt' found, did you mean:
 Command 'getopt' from package 'util-linux' (main)
setopt: command not found
No command 'setopt' found, did you mean:
 Command 'getopt' from package 'util-linux' (main)
setopt: command not found
No command 'setopt' found, did you mean:
 Command 'getopt' from package 'util-linux' (main)
setopt: command not found
No command 'setopt' found, did you mean:
 Command 'getopt' from package 'util-linux' (main)
setopt: command not found
No command 'setopt' found, did you mean:
 Command 'getopt' from package 'util-linux' (main)
setopt: command not found
No command 'setopt' found, did you mean:
 Command 'getopt' from package 'util-linux' (main)
setopt: command not found
No command 'setopt' found, did you mean:
 Command 'getopt' from package 'util-linux' (main)
setopt: command not found
No command 'setopt' found, did you mean:
 Command 'getopt' from package 'util-linux' (main)
setopt: command not found
No command 'setopt' found, did you mean:
 Command 'getopt' from package 'util-linux' (main)
setopt: command not found
No command 'setopt' found, did you mean:
 Command 'getopt' from package 'util-linux' (main)
setopt: command not found
No command 'setopt' found, did you mean:
 Command 'getopt' from package 'util-linux' (main)
setopt: command not found
No command 'setopt' found, did you mean:
 Command 'getopt' from package 'util-linux' (main)
setopt: command not found
No command 'setopt' found, did you mean:
 Command 'getopt' from package 'util-linux' (main)
setopt: command not found
No command 'setopt' found, did you mean:
 Command 'getopt' from package 'util-linux' (main)
setopt: command not found
No command 'setopt' found, did you mean:
 Command 'getopt' from package 'util-linux' (main)
setopt: command not found
No command 'setopt' found, did you mean:
 Command 'getopt' from package 'util-linux' (main)
setopt: command not found
No command 'setopt' found, did you mean:
 Command 'getopt' from package 'util-linux' (main)
setopt: command not found
No command 'setopt' found, did you mean:
 Command 'getopt' from package 'util-linux' (main)
setopt: command not found
No command 'setopt' found, did you mean:
 Command 'getopt' from package 'util-linux' (main)
setopt: command not found
No command 'setopt' found, did you mean:
 Command 'getopt' from package 'util-linux' (main)
setopt: command not found
unsetopt: command not found
No command 'setopt' found, did you mean:
 Command 'getopt' from package 'util-linux' (main)
setopt: command not found
No command 'setopt' found, did you mean:
 Command 'getopt' from package 'util-linux' (main)
setopt: command not found
No command 'setopt' found, did you mean:
 Command 'getopt' from package 'util-linux' (main)
setopt: command not found
No command 'setopt' found, did you mean:
 Command 'getopt' from package 'util-linux' (main)
setopt: command not found
No command 'setopt' found, did you mean:
 Command 'getopt' from package 'util-linux' (main)
setopt: command not found
autoload: command not found

以下是在/usr/share/zsh目录下使用tree命令的输出结果:

/usr/share/zsh/
├── 5.0.2
│   └── scripts
│       └── newuser
├── functions
│   ├── Calendar
│   │   ├── ...
│   ├── Calendar.zwc
│   ├── Chpwd
│   │   ├── ...
│   ├── Chpwd.zwc
│   ├── Completion
│   │   ├── AIX
│   │   │   ├── ...
│   │   ├── AIX.zwc
│   │   ├── Base
│   │   │   ├── ...
│   │   ├── Base.zwc
│   │   ├── bashcompinit
│   │   ├── BSD
│   │   │   ├── ...
│   │   ├── BSD.zwc
│   │   ├── compaudit
│   │   ├── compdump
│   │   ├── compinit
│   │   ├── compinstall
│   │   ├── Cygwin
│   │   │   ├── ...
│   │   ├── Cygwin.zwc
│   │   ├── Darwin
│   │   │   ├── ...
│   │   ├── Darwin.zwc
│   │   ├── Debian
│   │   │   ├── ...
│   │   ├── Debian.zwc
│   │   ├── Linux
│   │   │   ├── ...
│   │   ├── Linux.zwc
│   │   ├── Mandriva
│   │   │   ├── _rebootin
│   │   │   └── _urpmi
│   │   ├── Mandriva.zwc
│   │   ├── openSUSE
│   │   │   ├── ...
│   │   ├── openSUSE.zwc
│   │   ├── Redhat
│   │   │   ├── ...
│   │   ├── Redhat.zwc
│   │   ├── Solaris
│   │   │   ├── ...
│   │   ├── Solaris.zwc
│   │   ├── Unix
│   │   │   ├── ...
│   │   ├── Unix.zwc
│   │   ├── X
│   │   │   ├── ...
│   │   ├── X.zwc
│   │   ├── Zsh
│   │   │   ├── ...
│   │   └── Zsh.zwc
│   ├── Completion.zwc
│   ├── Exceptions
│   │   ├── catch
│   │   └── throw
│   ├── Exceptions.zwc
│   ├── MIME
│   │   ├── ...
│   ├── MIME.zwc
│   ├── Misc
│   │   ├── ...
│   ├── Misc.zwc
│   ├── Newuser
│   │   └── zsh-newuser-install
│   ├── Newuser.zwc
│   ├── Prompts
│   │   ├── ...
│   ├── Prompts.zwc
│   ├── TCP
│   │   ├── ...
│   ├── TCP.zwc
│   ├── VCS_Info
│   │   ├── ...
│   ├── VCS_Info.zwc
│   ├── Zftp
│   │   ├── ...
│   ├── Zftp.zwc
│   ├── Zle
│   │   ├── ...
│   └── Zle.zwc
└── help

这是我的Vagrant配置脚本

# Install dependencies
add-apt-repository ppa:pi-rho/dev # for latest tmux
apt-get update
apt-get remove vim-tiny -y
apt-get install vim tmux git tree htop reptyr xclip -y

# Install Zsh shell if it's not available
if ! cat /etc/shells | grep zsh; then
  echo "Zsh is not available, so we'll install it now"
  apt-get install zsh -y
fi

# For the Reptyr program to work we need to enable system access
# We do this by changing the ptrace scope from one to zero
sed -i 's/kernel.yama.ptrace_scope = 1/kernel.yama.ptrace_scope = 0/' /etc/sysctl.d/10-ptrace.conf

# Because this is a system control daemon, we need to restart the relevant service
sysctl -p /etc/sysctl.d/10-ptrace.conf

# Avoid the shell asking us to authorise the authenticity of github.com
# This happens when doing a git clone for the first time
echo -e "Host github.com\n\tStrictHostKeyChecking no\n" >> ~/.ssh/config

# Install dotfiles...
dotfiles_location=/home/vagrant/dotfiles
git clone https://github.com/Integralist/dotfiles.git $dotfiles_location
cd $dotfiles_location && git fetch && git checkout linux

# Ensure we don't move unnecessary files
shopt -s extglob
mv !(.|..|.git|README.md) ..

# Clean-up
cd ../ && rm -rf dotfiles

# Change to Zsh shell
chsh -s $(which zsh)

# Source the Zsh config file
source .zshrc

给你的问题点赞,因为你清楚地阐述了问题的细节。下次,我们可能不需要看到每一个细节,可以编辑一下加上注释,比如(类似的错误重复出现了40多次);-) 祝好运。 - shellter
1个回答

6

chsh 只改变当前用户的默认登录 shell,不会改变 当前 shell。

你需要注销并重新登录或手动执行 exec zsh 来更改活动/当前 shell。


谢谢,那解决了问题!我显然是个傻瓜 :-/ - Integralist

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