如何在云服务器上使用ZShell(zsh)

来自菜鸟教程
跳转至:导航、​搜索

介绍

本文介绍如何在云服务器上使用 zsh。 您可以通过简单地尝试启动它来验证 zsh 是否安装在您的 VPS 上:

zsh

如果您安装了 zsh,您将直接启动到该 shell。

否则,建议您在继续之前 安装 zsh

使用 zsh

在这一点上可能很难理解 zsh 比 bash 这样的 shell 强大多少。 让我们从研究 shell 的自动完成功能开始。

自动完成

假设我们要安装“vim-addon-manager”来帮助我们组织我们的文本编辑器配置文件。 我们不记得这个包叫什么了。 我们可以不使用 apt-cache 来搜索包名,而是使用 zsh 给出以“vim”开头的包列表。

sudo apt-get install vim<tab>
vim                vim-doc            vim-lesstif        vim-scripts
vim-addon-manager  vim-gnome          vim-migemo         vim-syntax-go
vim-athena         vim-gtk            vim-nox            vim-syntax-gtk
vim-common         vim-gui-common     vim-puppet         vim-tiny
vim-conque         vimhelp-de         vim-rails          vim-vimoutliner
vim-dbg            vim-latexsuite     vim-runtime        

当我们使用使用 apt 完成后,我们看到它为我们提供了可用软件包的列表。 然后,我们可以输入获得唯一命中所需的其他字母。 在这种情况下,键入“-ad ” 将根据需要完成命令。

sudo apt-get install vim-ad<tab>

让我们的自动完成功能更加强大。 让我们将以下部分添加到我们的 .zshrc 中:

nano ~/.zshrc
zstyle ':completion:*' menu select
setopt completealiases

这将做两件事。 它可以让我们自动完成我们可能在 .zshrc 中写入的任何别名,并且当有多个可用选项时,它还可以让我们从菜单中进行选择。 让我们再次获取 .zshrc 文件以加载我们的更改,然后再次尝试 apt-get 示例。

source ~/.zshrc
sudo apt-get install vim<tab>

它看起来一样。 不同的是,现在我们可以按下键,然后使用和箭头键选择您的选项。 在某些情况下,这可能会导致选择更快。

通配符

我们最初设置的选项之一是使用扩展的通配表达式。 通配符是一种在搜索或将参数传递给任何程序或函数时使用特殊符号来匹配和过滤结果的语法。

让我们尝试几个例子。 首先,如果您不熟悉这个想法,我们将尝试一些更传统的 globbing。 让我们创建一个测试目录并用一些文件填充它。

mkdir test
cd test
touch file1 file2 file3 file100 file120 file122 file200 file222
touch file250 file800 file808 file80 somefile anotherfile
touch thisotherfile file.txt file.c file.o file.html file.css
touch completelydifferent different separate
mkdir directa directb directc directd

我们的测试目录现在有很多我们可以选择和操作的文件和目录。

让我们选择其中包含 word 文件的所有内容。 星号 (*) 字符代表 0 个或多个字符。

ls *file*
anotherfile        file120     file200     file3
file808         file.html   somefile    file1
file122         file80      file.c      file.o
thisotherfile       file100     file2       file250
file800         file.css    file.txt

结果是标题中包含“文件”一词的每个文件。 假设我们只想找到以“file”开头的文件。

ls file*
file1      file122     file222     file80
file.c      file.o      file100     file2
file250     file800     file.css    file.txt
file120     file200     file3       file808
file.html

这会稍微减少我们的结果,但让我们进一步缩小范围。 插入符号 (^) 用于否定后面的模式。 因此,假设我们想要所有以“file”开头的文件,但我们不想要“1”紧跟在“file”之后的任何地方。

ls file^1*
file2      file222     file3       file800
file.c      file.html   file.txt    file200
file250     file80      file808     file.css
file.o

假设我们要查找所有以“file”开头的文件,其后有一个从 100 到 300 的数字。 我们可以使用小于 (<) 和大于 (>) 符号来包围一系列数字。

ls file<100-300>
file100        file120     file122     file200
file222     file250

如果我们想要所有这些结果,但我们特别不想要 file200,我们可以告诉 zsh 不要使用波浪号 (~) 字符来选择它。

ls file<100-300>~file200
file100        file120     file122     file222
file250

让我们做一些更复杂的选择。 我们可以通过在一组括号内提供选择器来进一步限定我们的结果。 如果我们想选择所有常规文件(不是目录、链接等),我们可以使用类似这样的东西。

ls *(.)
anotherfile        file100     file200         file80
file.css        separate    completelydifferent file120
file222         file800     file.html       somefile
different       file122     file250         file808
file.o          thisotherfile   file1           file2
file3           file.c      file.txt

请注意,我们创建的目录都没有列出。 相反,如果我们只想要目录,我们可以使用:

ls *(/)
directa:

directb:

directc:

directd:

接下来,让我们选择测试目录中的 5 个最新文件。 我们可以通过在括号中使用“o”限定词来做到这一点。 这选择了我们的排序方法。 我们将在“o”后面加上一个“m”,这意味着我们正在按修改时间排序。 最后,我们将在括号中提供一个范围,告诉 zsh 我们想要多少个结果。

ls *(.om[1,5])
completelydifferent    different   file.css    file.html   separate

各种各样的

这里有一些额外的想法可以尝试。

我们可以将 zsh 配置为根据文件扩展名自动使用特定程序打开文件。 我们将使用“后缀别名”来完成此操作。 这些可以添加到我们的 .zshrc 中,这样如果我们只需键入文件名并按回车键,就会使用正确的程序打开它。

让我们使用“less”打开任何扩展名为 .view 的文件,使用“nano”打开任何以 .edit 结尾的文件。 将此行添加到 .zshrc 的底部。

nano ~/.zshrc
alias -s view=less
alias -s edit=nano
source ~/.zshrc

现在,让我们创建两个文件来测试它。

touch test.view test.edit

如果我们输入:

test.view

当我们按回车键时,文件将以“less”打开。 但是,如果我们键入:

test.edit

正如预期的那样,该文件将在 nano 中打开。

zsh 为我们提供的另一个好处是完成提示。 zsh 在输入多行输入时为我们提供了很好的视觉指标。 试一试吧。 如果我们输入这样的内容并点击“回车”:

print “this is a line

我们将看到这样的提示:

dquote>

我们可以通过用第二组双引号结束我们的输入来完成这一行。

 dquote> that goes onto the next line”

如您所见,它告诉我们需要关闭什么样的输入才能完成语句。 如果我们尝试在提示符中键入一个简单的 shell 脚本,我们可以看到类似的事情发生。

if [[ -o interactive ]]; then
then> print yes
then> else
else> print no
else> fi

正如你所看到的,它给了我们同样的暗示。 如果您有跨越多行的长输入语句,这将非常有用。

将 zsh 设置为默认 shell

如果您认为云服务器上的 zsh 适合您的日常 shell 需求,则可以将其设为用户的默认 shell。 这样,每次登录时,都会加载您的首选项并生成一个 zsh 会话。 您将不再需要输入“zsh”来访问您的 VPS 中的 zsh。

chsh -s $(which zsh)

下次登录时,您将看到一个 zsh 提示。

贾斯汀·艾林伍德