返回顶部
首页 > 资讯 > 前端开发 > html >怎么快速实现命令行提示
  • 724
分享到

怎么快速实现命令行提示

2024-04-02 19:04:59 724人浏览 薄情痞子
摘要

本篇内容介绍了“怎么快速实现命令行提示”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一  命令行

本篇内容介绍了“怎么快速实现命令行提示”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

一  命令行提示

如果命令行工具稍微复杂一些,那么必须要提供对应的命令行提示,不然开发者几乎没法使用。举一个例子,阿里云有对应的命令行工 具aliyun-cli[1], 下载安装后就可以使用aliyun命令行工具了。执行  aliyun --help ,会发现非常多的子命令,如果没有命令行工具提示,开发者使用这个工具就非常复杂,要去查文档,或者通过命令行的help来输入命令。

aliyun的命令行工具也提供了对应的代码提示,如下所示:

怎么快速实现命令行提示

这个命令行提示还不错,你只需要选择对应的子命令然后再进行提示就可以了。

大多数开发者喜欢带描述的命令行提示。并不是所有的子命令和命令参数都命名得非常好,如aliyun命令行给出的live子命令提示,大家可能完全不知道这个live是什么 (当然,作为阿里云的同学,我还是知道的, live是视频直播)。而像如下包括描述的命令行提示就直观很多:

怎么快速实现命令行提示

二  生成命令行提示

这里不再介绍bash,zsh,fish等各种shell的命令行提示的机制,没有人会手动编写这些命令行提示脚本,大家都会使用框架生成对应shell的命令行提示脚本。

我找了一些命令行解析框架,并且能自动生成命令行提示的,如Java的picocli,node.js的commander.jspython的argparse,以及Rust的clap-rs等。我都尝试了一下,最终发现还是clap-rs生成的命令行提示比较好,就是我说的那种带描述,而且还有文件名和目录自动提示,枚举值的提示等,关键是也非常简单。如果有同学有更好的命令行解析框架,希望能留言分享一下。

那么如何让其他语言,如node.js,Java,Python这些语言编写的命令行工具也能实现和clap-rs的命令行提示一样的效果呢?

三  clap-rs的命令行YAML文件

clap-rs包含了一个命令行工具的YAML规范。我们都知道命令行工具交互比较简单,主要就两个部分:参数和子命令。你看到类似 --conf xxx.yaml 这些带参数名的都属于参数,也可以省略参数名,如 convert a.jpg a.png 其中的a.jpg和a.png也都是参数。子命令就比较容易理解了,我们每天使用的git就是大量使用子命令的,如 git add xxx.jpg 这些。当子命令还可以继续套用子命令,子命令同时也拥有自己的参数。

基于命令行这样的特性,我们完全可以将命令行工具的使用规范通过YAML描述出来,现在一切皆可YAML。

这里我给出一个阿里云命令行工具的YAML定义,当然只是demo。如下:

name: aliyun2 version: "0.1.0" about: "cli for Alibaba Cloud" args:   - version:       short: v       long: version       takes_value: false       about: Display version subcommands:   - oss:       about: 对象存储       subcommands:         - cat:             about: cat文本文件             args:               - file:                   takes_value: true                   required: true                   about: 文件名称         - ls:             about: list文件   - ecs:       about: 云服务器       subcommands:         - SendFile:             about: send file         - AddTags:             about: add tags

可以看出,我首先定义了两个子命令:oss和ecs,然后oss子命令下我又定义了两个子命令:cat和ls。对于oss的cat子命令,我又添加了file这个参数,这样我就可以使用cat来查看oss上文本文件的内容。

有了这个命令行工具YAML规范定义后,我就可以调用clap-rs提供的命令行工具接口,生成对应的shell的提示脚本。效果如下:

怎么快速实现命令行提示

这个命令行提示的效果是不是比原先的要好多了?提示有了描述,选择子命令和参数的时候就简单多了。

四  为所有命令行工具写YAML

讲到这里,相信大家都明白了。无论这个工具是Java,Python,Node.js还是Rust编写的,首先定义好该工具的YAML规范,接下来开发人员根据该规范去编写代码,他可以选择他喜欢的语言,他喜欢的命令行解析器,然后实现对应的功能即可。没有代码提升,编写YAML文件不出错是非常难的,所以我做了一个JSON Schema[2]文件,在编写YAML文件时可以进行代码提示,做到编写命令行YAML规范文件更加简单。 JSON Schema 的使用方法如下:

怎么快速实现命令行提示

接下来我们会基于该YAML文件,为各种shell生成对应的命令行提示脚本,如bash,zsh,fish和powershell,这样分开后,开发人员也不需要去处理那些他不清楚的命令行提示,或者找该编程语言对应的SDK来做命令行代码提示。如果没有怎么办?即便有了,生成的提示非常简单怎么办?毕竟命令行工具提示非常重要。

相信Node.js的开发者也不希望还要学习一下Rust和clap-rs,这样就太不高效了。因此我又编写了一个工具cli-completion[3],  其主要目的根据上面说的YAML文件帮你自动生成各种shell的命令行提示脚本。来看一下zsh的例子:

$ cli-completion --zsh commands/aliyun2.yaml > /usr/local/share/zsh/site-functions/_aliyun2 $ autoload -U compinit && compinit

再看一下oh-my-zsh的例子:

$ mkdir ~/.oh-my-zsh/custom/plugins/aliyun2  $ cli-completion --zsh aliyun2.yaml >  ~/.oh-my-zsh/custom/plugins/aliyun2/_aliyun2

通过这种方式,cli-completion可以为任何命令提供命令行提示。也就是说,以后,你只要编写命令行逻辑,关于命令行提示的问题,全部交给cli-completion帮你生成即可。当然考虑到用户体验,你可能需要在命令行工具中,将cli-completion生成的脚本,通过某一子命令,快速同步到客户端环境。

命令行的开发流程:YAML规范编写,命令行提示自动生成,开发人员下班前完成功能实现。

怎么快速实现命令行提示

有同学可能会问,我能否基于YAML文件,并结合某一命令行解析框架,自动完成整个应用的骨架生成,这完全可以,开发人员只要实现一些函数即可,开发会更简单。我个人认为使用PicoCli这些框架自动生成代码,是完全没有问题的。

五  将cli-completion FaaS化

这个功能大家一年都未必用上两次,费时安装也挺麻烦的。现在不是到处都是FaaS,我们也可以尝试一下。首先cli-completion是用Rust编写的,所以可以用传统的方式编写Rust Cloud Lambda,然后部署到云服务上,另外也可以写一个Rust WEB应用,如用actix-web,也非常简单。

这些都不够时髦,我们打算将cli-completion的代码WebAssembly化,然后以FaaS方式部署,这里我选择CloudFlare作为FaaS的运行平台。让我们来看一下Demo。

创建一个cli.yaml文件,如下:

name: cli1 version: "0.1.0" about: "CLI completion for bash, zsh, fish and powershell." args:   - help:       short: h       long: help       takes_value: false       about: Display this help

然后调用cli-completion的FaaS服务,就可以得到对应的命令行提示脚本代码。命令如下:

curl -H 'Content-Type: application/x-yaml' --data-binary "@cli.yaml" https://cli-completion.linux-china.workers.dev/completion/zsh

对比传统的cloud lambda或者cloud function,这种方式FaaS响应速度最快,这种服务调用次数非常少,基本就是每次请求都是冷启动,而WebAssembly这方面就非常有优势。

当然还有一个最大的原因:就是WebAssembly方式的FaaS,它最便宜。

题外话探讨一下cloudflare的WebASSMebly的实现,纯技术讨论,代码如下:

async function handleRequest(request) {     const { greet } = wasm_bindgen     await wasm_bindgen(wasm)     const greeting = greet()     return new Response(greeting, {status: 200}) }

上述代码中,wasm是一个WebAssembly.Module对象,它是从外部注入的,而不是开发者写的,是FaaS生成的。接下来就是从wasm_bindgen这个函数中获取wasm的导出函数,然后调用 wasm_bindgen(wasm) 将greet函数和wasm module中的export函数进行关联,然后调用greet就会转到wasm module的调用。如果是这样的话,WebAssembly.Module其实是可以外部管理的,当有请求时,再和javascript的函数进行关联,这样就可以保证WebAssembly的快速响应。

“怎么快速实现命令行提示”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: 怎么快速实现命令行提示

本文链接: https://lsjlt.com/news/84200.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 怎么快速实现命令行提示
    本篇内容介绍了“怎么快速实现命令行提示”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一  命令行...
    99+
    2024-04-02
  • Linux下怎么快速执行历史命令
    本篇内容介绍了“Linux下怎么快速执行历史命令”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Linux下执行了一些命令之后,可能还想再次执...
    99+
    2023-06-05
  • Win8.1怎么运行命令提示符?打开命令提示符六种方法
    命令提示符是在操作系统中,提示进行命令输入的一种工作提示符。在windows环境下,命令行程序为cmd.exe。即使我们用上了高大上的Win8.1,命令提示符仍然十分有用。本文将介绍多达六种打开命令提示符的...
    99+
    2022-06-04
    命令提示符 六种 方法
  • Python怎么快速构建命令行用户界面
    这篇文章主要介绍“Python怎么快速构建命令行用户界面”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Python怎么快速构建命令行用户界面”文章能帮助大家解决问题。Python Prompt To...
    99+
    2023-06-27
  • 怎么快速以管理员权限运行Linux命令
    怎么快速以管理员权限运行Linux命令,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。我们知道,一些 Linux 命令是要通过 sudo 权限才能运行的,这需要我...
    99+
    2023-06-28
  • linux快速跳转命令z怎么用
    小编给大家分享一下linux快速跳转命令z怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!快速跳转命令 - z要是每次都要进入一个目录很深的文件夹下,像下面这...
    99+
    2023-06-27
  • SCA命令行工具怎样快速构建FaaS服务
    这期内容当中小编将会给大家带来有关SCA命令行工具怎样快速构建FaaS服务,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Serverless 架构(无服务器架构),是云计算时代一种全新的、革命性的架构模式...
    99+
    2023-06-05
  • win7系统快速打开命令提示符窗口的两种方法
      win7系统中很多时候我们都需要通过命令提示符窗口来输入一些命令,而打开命令提示符窗口的方法是有很多的,像我们最常用的是点击开始,然后找到命令提示符,点击下就能打开了。   1、像我们如果要快速打开命令提示符窗口: ...
    99+
    2023-06-01
    win7 命令 提示符窗口 系统 命令提示符 方法
  • win10怎么快速打开cmd命令窗口
    在Windows 10中,有几种快速打开命令提示符窗口(CMD)的方法:1. 使用快捷键:按下Win + R键,在运行窗口中输入cm...
    99+
    2023-09-20
    win10
  • Node.js怎么实现命令行工具
    这篇“Node.js怎么实现命令行工具”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Node.js怎么实现命令行工具”文章吧...
    99+
    2023-07-04
  • Win8命令提示符怎么打开?Win8打开命令提示符的方法
    win8系统中,我们该如何打开命令提示符呢?由于命令提示符功能广泛,许多时候我们都会用到它。下面小编就给大家带来Win8打开命令提示符的方法,一起来看看吧! 方法一:带管理员权限 1、按Win+X呼出菜单...
    99+
    2022-06-04
    命令提示符 方法
  • openEuler快速入门-openEuler命令行基础操作
    系列文章目录 第一章 openEuler快速入门(一)-openEuler操作系统介绍 文章目录 系列文章目录前言一、shell是什么二、Linux命令行操作技巧三、基础命令3.1、Linu...
    99+
    2023-09-27
    linux 运维 服务器
  • java命令提示符怎么进入
    要进入Java命令提示符(也称为Java Shell),请按照以下步骤操作: 确保您已经安装了Java Development ...
    99+
    2024-02-29
    java
  • linux下怎么修改命令行提示符路径提示符路径长度
    这篇文章主要讲解了“linux下怎么修改命令行提示符路径提示符路径长度”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“linux下怎么修改命令行提示符路径提示符路径长度”吧!  基本上Linu...
    99+
    2023-06-13
  • PyCharm配置KBEngine快速处理代码提示冲突、配置命令问题
    目录配置项目[可选步骤]配置外部工具和命令实体定义工具生成客户端插件批处理文件服务器控制台工具启动服务器工具结束服务器进程工具切记配置快捷键本教程配置好后一劳永逸,不用再配置,每次只...
    99+
    2024-04-02
  • Ubuntu如何修改命令行提示符
    今天小编给大家分享一下Ubuntu如何修改命令行提示符的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1.更改ps1环境变量,...
    99+
    2023-07-04
  • 怎么用2个Unix命令给SQL提速
    这篇文章给大家分享的是有关怎么用2个Unix命令给SQL提速的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。我试图在 MariaDB(MySQL)上运行一个简单的连接查询,但性能简直糟糕透了。如何将查询时间从 38...
    99+
    2023-06-16
  • plsql命令行执行sql文件怎么实现
    要在PL/SQL命令行中执行SQL文件,可以按照以下步骤操作: 打开命令行窗口,并进入到PL/SQL的安装目录下。 使用以下...
    99+
    2024-04-09
    plsql
  • 如何实现cp命令不要覆盖提示
    本篇内容主要讲解“如何实现cp命令不要覆盖提示”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何实现cp命令不要覆盖提示”吧!在Linux下,如果希望将文件file拷贝到目录dir下,可以执行:...
    99+
    2023-06-12
  • Java.Utils怎么执行命令行命令
    小编给大家分享一下Java.Utils怎么执行命令行命令,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!常用的java框架有哪些1.SpringMVC,Spring...
    99+
    2023-06-14
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作