无需安装的 CLI 才是最好的

阅读数:1180 2018 年 9 月 11 日

本文关键字

  • Azure Cloud Shell 是运行在浏览器上的一个完整的终端
  • 可以像配置本地终端那样配置 Azure Cloud Shell
  • 可以在 Azure Cloud Shell 中使用 vim、emacs,它甚至提供了精简的 VS Code 体验
  • 实际上是通过浏览器向后端的 Unbuntu 终端发送命令
  • Cloud Shell 让我们可以使用 Azure CLI 而无需安装任何东西

前几天,我的一个朋友在 Azure 上部署了 Node,但他的网站运行不起来。我从来不会错过证明自己不是讨厌鬼的机会,所以我慷慨地向他提供了帮助。

他收到的错误消息是“服务不可用”,这正是我最喜欢的错误类型,因为这个错误不能代表什么,它就像是“烤面包上的奶酪”。

为了找出真正的错误,我需要查看日志文件。当时,我正准备问我的朋友是否安装了 Azure CLI。我意识到,如果他没安装的话,那会有点乱。

他在用 Mac 还是 Windows?他安装了 Homebrew 了吗?他用的 Python 的版本是什么?天哪!还有 Python 的版本问题。

我们有点紧张了,而我也不想再添点麻烦,说什么“安装这个 CLI,这样我们就可以读取日志文件”。

后来,我意识到,其实我们不必做任何事情。我们不需要安装 Azure CLI 就可以使用它。我们所需要的只是Azure Cloud Shell而已。

Azure Cloud Shell

“Cloud Shell”是一个运行在浏览器上的终端。它有几种不同的访问方式。如果已经打开了 Azure 门户网站,可以直接点击“铃铛”旁边的小图标(请参看下图)。

这会弹出一个新的终端窗口,Azure CLI 已经安装于其中,无需登录。

另一种方式是访问shell.azure.com

如果安装了Azure Account 扩展,那么可以在 VS Code 中登录。只需打开命令面板并查找“Cloud Shell”。

在启动了 Cloud Shell 实例后,就可以很容易地查看日志了。不需要登录,你只需要输入 Azure CLI 命令行,就好像你是个老专家。我们访问了他的站点日志,发现依赖项中漏了一个 npm 包。难道这不是每个 Node 应用程序经常碰到的问题吗?

这不是我第一次看到 Cloud Shell,但是,这是我第一次领悟到它的妙处。

当我第一次看到它时,我认为……

我没有领悟到。我的意思是,我已经有了一个终端,我有点喜欢它。它正在推出一个很好的 Flat UI 主题,我已经花了很多时间来调整它,但我总是记不住也找不到所有的 profile 文件。是~/.bashre,还是~/.zshrc?到底是不是~/.bash_profile?如果我有了~/bashrc,那还要它干嘛?生活简直变得毫无意义。

但 Cloud Shell 却非常棒,不是因为它取代了终端,而是因为它无需安装就能让我们访问 CLI。

我们倾向于安装大量的 CLI,但配置它们可不容易。我花了太多的时间与 Ruby 和 Python 版本做斗争,它们都是以安装 CLI 为名,但实际上与 Python 或 Ruby 毫无关系。我宁愿不要经历这个过程。

Azure Cloud Shell 给了我们无需配置的 CLI。Python 是什么版本?无关紧要。有 Cloud Shell 就可以了。而且很显然,我有一些 Python 运行时创伤后应激障碍。

云终端处处皆是。肯定不会只有 Azure 这么一个。让我感兴趣的是,它们是真实的“终端”吗?我能用它们做些什么?

我们一起来寻找答案。

vim

首先,我们要知道的是它支持 vim 吗?

是的,它可以支持 VIM,它还提供了所有 VIM 的彩蛋

正如 John Oliver 所说的——“很酷”。

接下来,我们需要知道是否可以通过它来安装一些东西。这里的“东西”,指的是“cowsay”。

apt-get

没有我的 cowsay,就不算是终端,因此,我试图安装 cowsay。

没有 sudo!但是,文档上确实提到,禁用访问是被禁用的。我猜想,这是为了防止像我这样的人乱用服务器而不小心把系统文件给删了。

好吧。太可惜了。但是,我没有被吓倒。我们来看看是否有 emacs。

有 emacs。那么我们还能够在 emacs 里玩贪吃蛇游戏吗?

我是这世界上最糟糕的贪吃蛇玩家。这游戏让我感到非常紧张。我更喜欢超级玛丽游戏,什么时候可以在 emacs 上玩这个游戏呢?

好,废话少说。我们来看看是否可以定制这玩意儿。在这个终端中,我们需要一些东西来好好使用 Azure CLI。从把 shell 更改为 zsh 开始。

zsh

我们已经知道我们什么都不能安装,但是如果已经有了 zsh 呢?我们试着运行一下看看。

可以!现在,我们可以添加 oh-my-zsh 了吗?它们是点文件,因此可以通过 curl 来安装。

现在,我们有了进展。我们可以更改主题吗?试试用“云”。看起来不错。

复制代码
// .zshrc file
# 设置要加载的主题名称。如果设置成“随机”,
# 每次加载 oh-my-zsh 就随机加载一个主题。
# 参看 https://github.com/robbyrussell/oh-my-zsh/wiki/Themes
ZSH_THEME="cloud"

很好,我很喜欢。这不是一个明亮的主题,但是我看到了一朵小云。

我应该注意到 Cloud Shell 不兼容某些主题。比如,在使用最流行的“Agnoster”主题时,它似乎不喜欢渲染燕尾形。

假如你想知道,“Agnoster”看起来应该是这样的:

没问题,反正我不用“Agnoster”。现在,我们来做一些插件。我用的最多的一个是“zsh-autosuggestions”。Jessica Deen 给我看了这个,它基本上只是追踪你输入终端的所有内容,然后,如果你再输入之前输过的内容,它就会给出提示。像这样:

看看这个是否有帮助?

这个 zsh-autosuggestion 插件并不在 oh-my-zsh 插件列表中,因此,可以手动安装:

git clone https://github.com/zsh-users/zsh-autosuggestions ~/.zsh/zsh-autosuggestions

然后,添加到你的~/.zshrc 文件中:

source ~/.zsh/zsh-autosuggestions/zsh-autosuggestions.zsh

我也冒昧地安装了 git、jsontools 和其他一些工具,它们都能用。

现在,让我们把 zsh 设置成默认 shell。通常,这是通过安装 zsh 来完成,但是现在已经安装好了。我们也不能正常使用 chsh,因为没有权限。

Shayne Boyer指出,可以在~/.bashrc 中设置 SHELL 变量。因为 Cloud Shell 对任何人都是相同的,你的 zsh 应该和我的 zsh 一样。

export SHELL=/usr/bin/zsh
exec /usr/bin/zsh -ld

现在,我们在 ZSH 中启动了我们的主题和所有默认的插件。即使是在 VS Code 中打开,也一样。我们在任何地方使用 Cloud Shell,都会用到这个设置。

npm

作为 JavaScript 开发者,我必须有自己的 Node。对我来说,默认情况下,在终端中找到 Node 一点也不奇怪。但是,让我感到震惊的是,npm 也是默认安装好的。

但是,这还不是全部。

文档中说它也支持 make、maven 和 pip。Java 开发人员看到最后这句话可能会感到很满意。我不是一个会经常使用 make 或 pip 的用户。我通常只在从 Stack Overflow 复制某些东西到我的终端上时才会用到它们。

它的工作原理是什么?

每次打开一个 Cloud Shell 实例,就会获得一个 Docker 容器,里面运行着 Ubuntu。然后,这个 Cloud Shell 通过 web socket 连接到该实例,成为 Ubuntu 容器的接口。

例如,如果在 Cloud Shell 中输入“Docker”,以下就是传给容器的内容:

看到了吗?它们是“d”“o”“c”“k”“e”“r”(绿色的箭头是向外的)。注意,web socket 也会对每次的键盘输入做出响应(红色的箭头是向内的)。因为,这就是终端该做的事。看看它对“[39m”和刚输入的字符做出怎样的响应?这是 ANSI 语法高亮显示,这也就是 Cloud Shell 为什么会知道用何种颜色显示文本,以及渲染主题和进行其他高亮显示。

在执行命令后,它就返回容器的输出。

在 Cloud Shell 中输入字符时,通过网络发送它们,在终端中执行,然后返回结果。

这真是非常了不起的壮举。它们把浏览器变成远程终端的代理 UI。

Cloud Shell 使用 Azure Storage 来持久化存储。所有的配置文件和工作所需的其他任何文件都存储于其中,并通过底层 Ubuntu 容器来挂载。

最新特性

写完本文,打算过一段时间再发布,但 Cloud Shell 迫不及待地添加了一个新的、相当“有人气”的功能。

现在,可以通过在 shell 中输入 code 来获得一个类似 VS Code 的编辑器。该编辑器在终端上方打开。我说它类似 VS Code,是因为它显然是个来自 VS Code 的文本编辑器,提供了查找与替换、多游标和命令面板(F1)。

不是每个人都适合用 vim。这里说的每个人,指的是我。对于其他人,现在有了这个漂亮的可视化编辑器,我称之为 VS Code,即使它不是 VS Code。

我甚至找出了如何关闭它的方法。Vim 的用户们,请看下图。

了解更多 Cloud Shell 的相关信息

Cloud CLI 的东西都是必要的,但是不容易安装。Cloud Shell 提供了 CLI 的全部功能以及相当强大的终端体验,而所需的只是浏览器。

Azure Docs可以找到 Cloud Shell 和 Azure Mobile app 的文档,也可以找到Azure Cloud Shell支持的所有功能的完整列表

作者简介

Burke Holland 住在田纳西州纳什维尔,是一位前端程序员。他热爱 JavaScript,因为这是他唯一能用来表达自己的方式。明白吗?不明白也没关系。Burke 的博文只比他写的代码好那么一点点,绝对不如他用第三人称来介绍自己那么好。Burke 是微软 Azure 团队的一员。可以通过他的推特 @burkeholland 联系他。

阅读英文原文:The Best CLI Is the One You Don’t Have to Install

感谢无明对本文的审校。