U子注
对于这个选项,肯定有不少新手朋友感到很迷很迷…… 其实U子在查清楚之前也完全搞不懂这到底是什么。
不过,这个选项可以说是整个页面中第一个、大概也是唯一一个涉及到了命令行系统本身的一些概念的选项了。
对于理解“命令行”这种操作方式来讲,这是个非常好的说明对象。
U子会在这里把之前查到的所有与命令行系统相关的知识都写出来,但是由于篇幅有限,不可能讲太细,所以想深入了解的同学就自己再去查一下吧。
首先,我们重新梳理一下关于吉里吉里的命令行系统的操作方式。
之前提到了两种,分别是:
1.通过win+R打开Windows系统的“运行”功能,在里面输入kr可执行文件的路径然后键入需要操作的命令行,然后运行;
2.通过创建kr可执行文件的快捷方式,并在其属性信息中键入需要操作的命令行,然后运行快捷方式。
但是这两种其实都不是最正规的“命令行”的操作模式,因为它们都不是在“命令行操作界面”也就是平常我们讲的“命令提示符(command prompt)”中来书写标准的命令行语句的操作方式。
嗯,是的,说到这个“命令提示符”,很多同学大概马上就明白了,其实就是Windows系统的cmd.exe,它是一种模仿命令行系统的工具。
这个东西也是年代久远,早在win95的时代它就已经存在了,它是dos系统向有图形化操作界面的系统过度的一个中间产物。
讲得极端一点,我们甚至可以把它理解为是“系统中的系统”,它本身就是一个小型的dos系统。
而我们这里要讲的第三种操作吉里吉里命令行系统的方法,就是通过Windows系统的cmd.exe。
上文也说了,由于吉里吉里是有GUI的应用程序,它本身木有命令行界面(那个console、也就是debug控制台,是冒牌的,只是做个样子而已……)
不过截至目前,kr都主要是面向Windows系统被设计的,所以能用cmd来操作kr的命令行也不是什么难理解的事。
很多同学有可能在之前没怎么接触过cmd这个东西,只是概念上知道它似乎有很多命令、而且都得手打,有图形界面谁还用它呀……
嗯…… 毕竟时代在发展嘛,不过cmd也是很强的,用它可以很随意地操作Windows系统。
这次就不讲太多与cmd的命令相关的内容了,在操作kr的命令行时,我们只需要记住一条“cd”命令就可以了。
cd 是用来切换目录的指令,我们之所以需要它是因为我们需要把当前目录定位到需要操作的kr可执行文件存放的目录里,然后直接输入kr的可执行文件名再空格敲选项就可以回车执行了。
假设需要操作的kr.exe是放在d盘的alpha文件夹下的beta文件夹里的话,拿上一条选项 -sel 来举例,在cmd中就可以这样来写:
d: → 回车执行 → cd alpha\beta → 回车执行 → kr.exe -sel data → 回车执行
这样就可以启动kr.exe这个内核的那啥界面了。哦对了,如果这个kr.exe是打包后的exe的话,也是可以打开那个界面的,这一点之前忘了提。
不过如果用一个打包成exe的程序去运行另一个工程的话,会占用更多的内存。这大概算个bug了,不过一般也没人闲得去这么弄……
接下来讲讲所谓的“重定向”(redirect)和“管道”(pipe)。这两种都是命令行系统中的概念,在功能上也存在一些相似之处。
我们先来看重定向。
想必很多同学都知道,在DOS的那个时代,操作系统是没有图形化的操作界面的,当时的计算机,就是以“输入命令”的方式来完成各种操作的。
而“重定向”也是自MSDOS起就被支持的命令行特性,它负责将制定的命令或语句所产生的输入输出请求由缺省的“控制台”转交给其它的“设备”来完成。
它的启动标志是在句中出现了“重定向符号”(包括“> , >> , <”三个)。
一般的命令行程序输入输出请求都通过内部定义三个“端口”(在NT下称为“句柄”,在DOS下未定义)来完成。
分别为标准输入stdin、标准输出stdout、标准错误stderr。
它们通常指向的设备为控制台(console,代码为CON),其中stdin指向控制台的键盘,stdout/stderr指向控制台的监视器。
因此,控制台通常即指键盘与监视器的联合体,这是在早期大型机的终端机上所体现出来的概念。
其中的stdin可被<重定向,stdout可被>、>>重定向,而stderr在DOS下不可直接重定向,只有通过ctty或其它命令将系统控制权转交给其它设备的方式,来间接完成。
……
解释起来还有很长的内容可以讲,上面这一小段是U子找到的资料里讲的,U子觉得那篇资料里讲得很专业而且也很透彻,有兴趣阅读完整版的同学可以来找U子要这篇文。
我们换一种通俗点的解释:重定向,就是把原本应该输入(或输出)到某个地方的数据,输入(或输出)到另一个地方去。因为文件流的方向变了,所以叫“重定向”。
其实重定向这个概念在很多地方都通用,包括Unix系统、C语言、PHP中等等,意义也都差不多。
用重定向的方式输出 -printdatapath 选项的值,在cmd中可以像下面这样写。
首先还是把目录定位到kr可执行文件的目录下,然后:
kr.exe -printdatapath > 1.txt
回车运行后,就可以发现kr.exe所在的目录下多了一个1.txt,这里面就记录着当前的数据文件保存路径。
同样你也可以用这种方式把这串数据传给别的程序,虽然U子没去尝试过……
然后我们讲讲管道。
这次直接用比较通俗的解释:管道,就是把前面一个命令的结果、当作下一个命令的条件或者说参数来执行。
具体在写的时候是用“|”这个字符来标志的,就是把“或”删掉一根,对应键盘上的 shift + 反斜杠(\)。
管道这个概念也通用于许多地方,比如Unix系统、Linux系统、C语言以及blabla…… 其意义也都是差不多的。
不过,管道有点像是重定向的升级版,它可以一次设定多个步骤的操作,并且可以跟重定向相结合使用。
比如,我们可以像这样写:kr.exe -printdatapath > 2.txt | type 2.txt
同样默认是当前目录就是kr.exe所在的目录,并且之前不存在名为2.txt的文件,type是将文本文件的内容输出到cmd面板上,执行后,cmd的面板上就会显示出当前的数据文件保存路径了,同样2.txt里面也会保存着相同的字符串。
这次就先讲到这里吧…… 应该已经把命令行系统相关的要点都讲清楚了,至少在kr的应用上应该是足够了,至于kr怎么跟别的程序联系起来、能跟什么程序实现交互操作等等,有兴趣的同学自己研究一下吧……
不过这一大段读完之后不难发现,kr在设计的时候就引用了各种各样计算机方面的概念,就像tjs这种脚本语言也集合了很多其他语言的特点一样,嗯,总之向作者大大(们)致个敬w