热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

yori,一个提升windows命令行使用体验的shell(cmd替代)

先回顾一下已知win上的几大主流命令行shell(指在主要win下使用,操作win的资源,不包括直接弃疗用wsl)

先回顾一下已知 win 上的几大主流命令行 shell (指在主要 win 下使用,操作 win 的资源,不包括直接弃疗用 wsl )




  1. cmd

  2. PowerShell

  3. (各种来源的,非 wsl ) bash

cmd 自然是没得说,即使微软主推 ps,也没彻底汰换掉 cmd.exe ,还是有不少朋友喜欢使用。
启动速度快,兼容性广泛都是它的优点。
当然,缺陷也是非常之多,
比如没有方便的宏 /alias 机制;
万恶的 终止批处理操作吗(Y/N)? ;
以及没有内建的多任务管理功能等待;
再加上已经官宣不再更新了,所以也不可能再有改进的机会。

PowerShell 大概属于现代 shell 的一员了,各种特性也给的很全。
包括现在支持各种 readline 的快捷键和命令补全。
命令基本上都是自解释性的,还能嵌入 C#实现功能扩展。
缺陷则主要集中在:
启动速度过慢(即使没有写用户配置,都有肉眼可见的启动延迟,但是怎么可能不写用户配置呢,这样一来,加载时间基本都短不了);
命令约定和常规的 unix 风格和 dos 风格都不搭;
用对象做管道传递,但是和传统程序不兼容
(以至于传输常规文本的性能都比较捉急,最终的效果就是给人一种卡卡的感觉),
相比之下 PowerShell 更适合编写长期使用的脚本,而非交互式使用。



接下来就是知名的 bash,很多人可能都是通过 git for windows 或者 msys2 获取的,伴随而来的是一整套 unix 常见工具链。
对于相关开发的人来说是属于比较友好的。
而缺陷在于:
路径格式不一致,win 的目录分割符不兼容,
管道里还可以通过 cygpath 转换,但是复制粘贴的时候就麻烦了;
除此之外,由于使用的是 c 库函数,所以目录长度受限于 260 的路径限制,
在一些场景会报错 File name too long ;
最后,由于每次按下回车都会创建好多个进程生成 PROMPT,
但是 windows 创建进程速度极慢,给人也是一种卡卡的感觉。

(讽刺的是 Git for windows 是默认支持长文件名的,但是附带的 bash 却没有,这就导致了各种诡异的问题)

我相信只要有过一段时间使用 windows 命令行接口的用户,都会有类似的感受吧。

其实很多时候大家只是需要一个能在 cmd 基础上增强的工具而已,
这里有一个选项:clink,通过 hook cmd 来实现扩展,
但是我这边是处于一直无法使用的尴尬状态
( 64 位一直 hook 不成功,32 位可以,但是 32 位的 cmd 会受到 WoW64 重定向的影响)。
然后它实际上也没有解决全部的问题,
比如该缺的工具还是缺
(虽然可以通过 msys2 来补充,但是上面说的路径问题还是影响比较大的)。

然后某次不经意间发现了 yori 发现这玩意真就瞄着 cmd 的痛点去的,各种角度看都是 cmd 的增强,这条路算是比较正常的路线,而不是 unix 工具的移植(毕竟,真要用 linux 的时候都是直接实机装 linux,远程或者 wsl 了,谁还用 windows 啊)

目前简单用下来发现有如下几个特性:

  1. 中文支持还行,最好切到 utf-8 模式(

  2. 可以使用类似反引号(
    1
    ` `

    )将里面的命令的执行结果引出来


  3. 支持管理后台任务,使用 & 创建,而 &! 则会创建后搜集命令的执行结果,可以用 job X output 查看,这个看起来对脚本很友好

  4. tab 补全不仅可以补全命令,还可以在长命令行的中间开始补全,而不会把后面的参数也吞掉,支持多种补全模式,还能类似其他 shell 一样自定义命令的补全

  5. 支持 bash 风格的 filename.{ext1,ext2} 展开文件名,这个非常棒,重命名文件很有效

  6. 可以用 ~ 来指代家目录了,还有 ~Documents 扩展打开我的文档(和 bash 不一样,但是考虑到 windows 很少人会真的使用多个账户,这个改动我觉得是合理的)

  7. 正确实现的 alias,而不是 doskey 那种只看开头的暴力替换

  8. 可以映射 F1-F12 功能键

  9. 命令历史可以保存

  10. 内置指令可以扩展,因为实际上就是加载 dll 文件然后执行指定的函数(后缀名要求为 com )

  11. 自带一个编码转换工具 iconv (默认编码 UTF-8 )

  12. 甚至支持 cd 到 WSL 的路径
    1
    \\wsl\YourDistro


  13. 在 win10 以下会帮你扩展 VT100 的属性到 windows console api

  14. bat 兼容,指可以在执行完 bat 后导出其中设置的环境变量,这样就可以直接使用 vs 的环境变量加载了

完整安装的话,还有 80 多款自带工具,包括部分 unix 兼容的,和对 win32 的控制台命令扩展的,均可以使用

1
-?

1
/?

获取帮助

(如果使用 windows terminal,部分功能会无法使用,主要是那些涉及 cmd 窗口扩展的,比如 quickedit 模式增强功能)

除了 msys2+zsh 这样伪 POSIX 的之外,也可以用 elvish 等 non-posix complaint shell 。


   



推荐阅读
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • 本文详细介绍了GetModuleFileName函数的用法,该函数可以用于获取当前模块所在的路径,方便进行文件操作和读取配置信息。文章通过示例代码和详细的解释,帮助读者理解和使用该函数。同时,还提供了相关的API函数声明和说明。 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • 本文介绍了三种方法来实现在Win7系统中显示桌面的快捷方式,包括使用任务栏快速启动栏、运行命令和自己创建快捷方式的方法。具体操作步骤详细说明,并提供了保存图标的路径,方便以后使用。 ... [详细]
  • 本文介绍了PE文件结构中的导出表的解析方法,包括获取区段头表、遍历查找所在的区段等步骤。通过该方法可以准确地解析PE文件中的导出表信息。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • 树莓派语音控制的配置方法和步骤
    本文介绍了在树莓派上实现语音控制的配置方法和步骤。首先感谢博主Eoman的帮助,文章参考了他的内容。树莓派的配置需要通过sudo raspi-config进行,然后使用Eoman的控制方法,即安装wiringPi库并编写控制引脚的脚本。具体的安装步骤和脚本编写方法在文章中详细介绍。 ... [详细]
  • 如何用JNI技术调用Java接口以及提高Java性能的详解
    本文介绍了如何使用JNI技术调用Java接口,并详细解析了如何通过JNI技术提高Java的性能。同时还讨论了JNI调用Java的private方法、Java开发中使用JNI技术的情况以及使用Java的JNI技术调用C++时的运行效率问题。文章还介绍了JNIEnv类型的使用方法,包括创建Java对象、调用Java对象的方法、获取Java对象的属性等操作。 ... [详细]
  • 本文介绍了一种轻巧方便的工具——集算器,通过使用集算器可以将文本日志变成结构化数据,然后可以使用SQL式查询。集算器利用集算语言的优点,将日志内容结构化为数据表结构,SPL支持直接对结构化的文件进行SQL查询,不再需要安装配置第三方数据库软件。本文还详细介绍了具体的实施过程。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 本文讨论了在数据库打开和关闭状态下,重新命名或移动数据文件和日志文件的情况。针对性能和维护原因,需要将数据库文件移动到不同的磁盘上或重新分配到新的磁盘上的情况,以及在操作系统级别移动或重命名数据文件但未在数据库层进行重命名导致报错的情况。通过三个方面进行讨论。 ... [详细]
author-avatar
lvyanbo
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有