脚本之家

你与百万开发者在一起

什么是扩展指令操作码技术_bin文件怎么解压_扩展命令操作步骤

扩展命令操作步骤_什么是扩展指令操作码技术_bin文件怎么解压

前情回顾

在中我们介绍了第一种方式实现轻松扩展GitBash命令,首先简单回顾一下主要知识.

GitBash命令行工具是Windows电脑安装Git时默认集成的终端工具,与此同时还有双胞胎兄弟GitGUI图形化工具.

什么是扩展指令操作码技术_bin文件怎么解压_扩展命令操作步骤

GitBash是终端工具,而Windows系统默认也有个cmd终端工具,这两个命令行其实都可以运行Git相关命令,二者在这方面差异不大,使用哪一个都可以.

但是如果你更熟悉linux命令行语法的话,那么肯定建议选择GitBash命令行而不能是cmd命令行.

因为windows命令行语法和linux命令行语法差异还是比较大的.

当然,GitBash和cmd作为同类产品,两者并不是互斥的,而应该是互补产品,某些情况下,GitBash可能还需要调用cmd才能完成相应任务呢!

比如说GitBash默认没有tree命令,而cmd命令行却又,所以我们可以在GitBash中调用cmd帮我们执行tree命令.

GitBash调用cmd程序执行相关命令时,请一定要以winpty开头,不然可能会发生意想不到的结果.

bin文件怎么解压_什么是扩展指令操作码技术_扩展命令操作步骤

问题背景

在结尾处,我们留下了一个问题,那就是: 如果cmd也没有某些命令的话,GitBash又该如何执行该命令?

正所谓”巧妇难为无米之炊”,GitBash命令行没有wget命令,cmd命令行也没有wget命令,因此GitBash自然无法调用wget命令,那么解决思路就很清楚了:

扩展wget命令并让GitBash识别到wget命令文件呗!

什么是扩展指令操作码技术_bin文件怎么解压_扩展命令操作步骤

还记得中GitBash想要调用cmd的tree命令,并不能直接winpty tree而是winpty tree.com.

  1. Administrator@snowdreams1006 MINGW64 /f/workspace/test

  2. # 直接输入 ` tree` 命令会提示找不到该命令文件

  3. $ tree

  4. bash: /usr/bin/tree: No such file or directory


  5. Administrator@snowdreams1006 MINGW64 /f/workspace/test

  6. # 输入 `tree.com` 命令则能调用该命令但会出现中文乱码

  7. $ tree.com

  8. ▒▒ ▒▒▒▒ ▒▒▒ļ▒▒▒ PATH ▒б▒

  9. ▒▒▒▒▒к▒Ϊ 62AE-62CA

  10. F:.

  11. ▒▒▒▒cmd

  12. ▒▒▒▒git-bash


  13. Administrator@snowdreams1006 MINGW64 /f/workspace/test

  14. # 直接输入 `winpty tree` 命令依旧找不到该命令

  15. $ winpty tree

  16. winpty: error: cannot start 'tree': Not found in PATH


  17. Administrator@snowdreams1006 MINGW64 /f/workspace/test

  18. # 输入 `winpty tree.com` 命令则正常调用该命令

  19. $ winpty tree.com

  20. 常用 的文件夹 PATH 列表

  21. 卷序列号为 62AE-62CA

  22. F:.

  23. ├─cmd

  24. └─git-bash

从上述的例子中,我们不难总结出以下结论:

探寻庐山真面目

GitBash命令行语法不仅和linux语法一致,而且设计思想基本也差不多,我们知道在linux中有一句话可以概括整个系统核心:一切皆文件

那么GitBash所支持的各种命令自然也是文件,只要找到了命令文件自然也就明白为什么不支持tree命令了,换句话说,下一步我们就知道如何才能支持tree命令.

在桌面上找到GitBash图标的快捷方式,选中该图标右键,然后选择打开文件位置,现在应该进入到Git的安装目录了.

什么是扩展指令操作码技术_扩展命令操作步骤_bin文件怎么解压

接下来,进入usr/bin目录,你会发现所有可执行的命令文件,但是并找不到tree.exe文件,所以自然无法执行tree命令.

什么是扩展指令操作码技术_bin文件怎么解压_扩展命令操作步骤

那么如果我们能够找到tree.exe文件并将该命令文件放到usr/bin目录下自然就能够正常调用tree命令了,但是我们又该去哪里找tree.exe文件呢?

轻松扩展git bash命令(中)

tree.exe命令文件千千万,但是适合GitBash命令行运行的却并不是全部文件.

想要对症下药,自然要先弄清楚GitBash到底属于何门何派,应用了哪些技术栈,这样才能知己知彼,轻松扩展更多命令.

Git原来是linux系统专属软件,后来由GitforWindows组织进行了移植,所以现在Git才能够支持Windows系统.

GitforWindows在移植Git的过程中借鉴了大量的开源项目,包括minGW和msys2项目.

bin文件怎么解压_什么是扩展指令操作码技术_扩展命令操作步骤

不查不知道,一查就发现了新大陆,原来想要把linux软件移植到windows平台的做法并不孤单,甚至提出了WSL概念!

WSL:WindowsSubsystemForLinux的缩写,即为linux打造的windows子系统,可以简单理解为在windows系统上获得linux系统的体验.

所以,GitBash背后的技术支持来源于minGW和msys2等WSL项目.

既然,GitBash默认没有提供tree命令文件,那我们就自己动手去扩展tree命令.

由于暂时没有找到minGW已编译好的可执行文件,所以只能找其他WSL项目进行移植,亲测可行!

GnuWin项目源码托管地址,其中GnuWin64是 64 位操作系统,GnuWin32是 32 位操作系统,不过GnuWin64仍在开发计划中,所以我们只能使用GnuWin32.

GnuWin64:

GnuWin32:

依次选择Files>tree>1.5.2.2便可以找到tree命令文件,这里提供了各种文件类型,既有源码文件又要安装文件,还有可执行的二进制文件.

扩展命令操作步骤_bin文件怎么解压_什么是扩展指令操作码技术

tree-1.5.2.2-bin.zip下载地址:

二进制文件

接下来的事情就比较简单了,将二进制文件tree-1.5.2.2-bin.zip解压,找到tree.exe文件并复制到Git的安装目录下面的usr/bin目录中即可支持tree命令.

  1. Administrator@snowdreams1006 MINGW64 /f/Downloads/tree-1.5.2.2-bin

  2. # 解压 `tree-1.5.2.2-bin.zip` 文件,查看文件目录,`tree.exe` 位于 `bin` 目录下.

  3. $ winpty tree.com

  4. 常用 的文件夹 PATH 列表

  5. 卷序列号为 62AE-62CA

  6. F:.

  7. ├─bin

  8. ├─contrib

  9. └─tree

  10. └─1.5.2.2

  11. ├─tree-1.5.2.2

  12. └─tree-1.5.2.2-src

  13. ├─man

  14. └─cat1

  15. └─manifest

什么是扩展指令操作码技术_扩展命令操作步骤_bin文件怎么解压

现在再次测试tree命令来一起见证奇迹吧!

  1. Administrator@snowdreams1006 MINGW64 /f/Downloads/tree-1.5.2.2-bin

  2. # `tree` 命令等价于 `tree.exe` 命令,执行的正是我们刚刚扩展的 `tree-1.5.2.2-bin.zip` 二进制文件

  3. $ tree

  4. .

  5. ├── bin

  6.    └── tree.exe

  7. ├── contrib

  8.    └── tree

  9.    └── 1.5.2.2

  10.    ├── tree-1.5.2.2

  11.    ├── tree-1.5.2.2-GnuWin32.README

  12.    └── tree-1.5.2.2-src

  13.    ├── CHANGES

  14.    ├── INSTALL

  15.    ├── LICENSE

  16.    └── README

  17. ├── man

  18.    └── cat1

  19.    └── tree.1.txt

  20. └── manifest

  21. ├── tree-1.5.2.2-bin.mft

  22. └── tree-1.5.2.2-bin.ver


  23. 9 directories, 9 files

GitBash扩展的tree命令的后缀名是.exe,而刚好能够识别,因此不必输入tree.exe命令.

安装文件

tree命令本身比较简单,没有其他依赖,所以我们可以直接将二进制文件复制到目标目录中即可正常运行,但是有些命令依赖项比较多,简简单单复制二进制文件并不能正常运行.

有兴趣的小伙伴们可以试试将wget的二进制文件复制到目标目录下,看一下能否正常运行wget命令?

答案是: 不能!

所以这一次我们不再采用复制二进制文件方式,而是安装软件形式进行扩展wget命令.

wget-1.11.4-1-setup.exe下载地址:

bin文件怎么解压_什么是扩展指令操作码技术_扩展命令操作步骤

双击可执行文件wget-1.11.4-1-setup.exe,准备进行安装!

什么是扩展指令操作码技术_扩展命令操作步骤_bin文件怎么解压

接受协议,勾选我同意,并下一步.

选择安装的目标路径,切记一定要安装到Gitusr目录下!!!

选择安装组件,默认选项即可.

什么是扩展指令操作码技术_bin文件怎么解压_扩展命令操作步骤

选择菜单目录,建议设置成GitWget.

扩展命令操作步骤_bin文件怎么解压_什么是扩展指令操作码技术

选择附加任务,默认选项即可.

什么是扩展指令操作码技术_bin文件怎么解压_扩展命令操作步骤

确认安装信息,这里确认下安装目录是不是Git的安装位置下面的usr目录以及开始菜单目录是不是GitWget.

什么是扩展指令操作码技术_扩展命令操作步骤_bin文件怎么解压

点击下一步,等待安装完成.

什么是扩展指令操作码技术_扩展命令操作步骤_bin文件怎么解压

什么是扩展指令操作码技术_扩展命令操作步骤_bin文件怎么解压

安装完成后,再次查看GitBash的usr/bin目录,发现wget.exe命令文件确实安装到该目录下.

安装成功后,测试一下看看到底能不能正常运行吧!

  1. Administrator@snowdreams1006 MINGW64 /f/workspace/test

  2. # 当前文件目录,`tree` 调用的是刚刚扩展的 `tree` 命令

  3. $ tree

  4. .

  5. ├── cmd

  6.    └── cmd.md

  7. └── git-bash

  8. └── git-bash.md


  9. 2 directories, 2 files


  10. Administrator@snowdreams1006 MINGW64 /f/workspace/test

  11. # 直接输入 `wget` 出现中文乱码

  12. $ wget

  13. F:Gitusrbinwget▒▒δָ▒▒ URL

  14. ▒÷▒▒▒ F:Gitusrbinwget [ѡ▒▒]... [URL]...


  15. ▒볢▒▒ʹ▒á▒F:Gitusrbinwget --help▒▒▒鿴▒▒▒▒▒ѡ▒

  16. SYSTEM_WGETRC = c:/progra~1/wget/etc/wgetrc

  17. syswgetrc = F:Gitusr/etc/wgetrc


  18. Administrator@snowdreams1006 MINGW64 /f/workspace/test

  19. # 输入 `winpty wget www.baidu.com` 解决中文乱码问题并下载 `www.baidu.com` 网页

  20. $ winpty wget www.baidu.com

  21. SYSTEM_WGETRC = c:/progra~1/wget/etc/wgetrc

  22. syswgetrc = F:Gitusr/etc/wgetrc

  23. --2019-05-18 14:03:47-- http://www.baidu.com/

  24. 正在解析主机 www.baidu.com... 115.239.211.112, 115.239.210.27

  25. Connecting to www.baidu.com|115.239.211.112|:80... 已连接。

  26. 已发出 HTTP 请求,正在等待回应... 200 OK

  27. 长度:2381 (2.3K) [text/html]

  28. Saving to: `index.html'


  29. 100%[======================================>] 2,381 --.-K/s in 0s


  30. 2019-05-18 14:03:47 (87.2 MB/s) - `index.html' saved [2381/2381]



  31. Administrator@snowdreams1006 MINGW64 /f/workspace/test

  32. # 再次查看当前目录,`www.baidu.com` 网页已成功下载到当前目录.

  33. $ tree

  34. .

  35. ├── cmd

  36. │   └── cmd.md

  37. ├── git-bash

  38. │   └── git-bash.md

  39. └── index.html


  40. 2 directories, 3 files

源码文件

按理说应该也可以编译成功,不过将源码编译成可执行的二进制文件可能比较费劲,因此暂未测试.

如果小伙伴们感兴趣可以自行安装c环境编译安装试试看,编译成功后别忘了告诉我哟!

未完待续最后一招

现在我们已经学会了两种方式来扩展GitBash命令,分别是调用cmd以及按需扩展指定命令.

但是,这两种方法都有一定的局限性,方法一的局限性可以用方法二来解决,那方法二的局限性又体现在哪?

方法二属于缺啥补啥,GitBash命令行没有tree命令,但WSL项目有编译好的tree二进制文件,所以直接拿来用即可.GitBash命令行没有wget命令,但WSL项目有wget的安装文件,所以我们安装集成到GitBash即可.

那如果WSL没有目标命令呢?或者说找不到相应的WSL的目标命令文件呢?

难道就束手无策了吗?

不不不,还有最后一招,此招一出,惊天动地,相信你再也不会说无法扩展GitBash命令了!

由于篇幅有限,打算另开一篇文章单独阐述,敬请期待下一篇文章—轻松扩展git bash命令(下).

最后感谢阅读支持,如果有更好的解决方法,欢迎留言一起探讨,下次见!

本文作者:雪之梦技术驿站bin文件怎么解压,你在互联网的路上匆匆而来bin文件怎么解压,雪之梦技术驿站助你满载而去。

限 时 特 惠: 本站每日持续更新海量各大内部创业教程,加站长微信免费获取积分,会员只需38元,全站资源免费下载 点击查看详情
站 长 微 信: thumbxmw