Ubuntu Zsh(通过 Vagrant)未定位 Zsh 或其功能

Int*_*ist 4 linux bash shell ubuntu zsh

我有一个 Vagrant 配置脚本,如果 Zsh 不可用,它会尝试安装 Zsh,然后更改 shell 以使用 Zsh。

我认为我遇到了两个问题:

第一个是我不相信 shell 会更改为 Zsh,因为当我运行vagrant ssh以访问 Ubuntu VM 并且一旦运行ps -p $$命令表明 Bash 是正在运行的 shell(我期望 Zsh 的位置)。

第二个问题是,如果它正在更改为 Zsh shell(无论ps -p $$返回什么报告),那么当我获取 .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 -> 很多错误发送到标准输出~~
  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
Run Code Online (Sandbox Code Playgroud)

? 输出是:

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
Run Code Online (Sandbox Code Playgroud)

~~ 下面是错误列表,而 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
Run Code Online (Sandbox Code Playgroud)

**目录上tree命令的输出/usr/share/zsh

/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
Run Code Online (Sandbox Code Playgroud)

这是我的 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
Run Code Online (Sandbox Code Playgroud)

Eta*_*ner 5

chsh仅更改当前用户的默认/登录 shell,它不会更改当前shell。

您要么需要注销并重新登录,要么手动exec zsh更改活动/当前 shell。