# mousechsh_cli.shell **Repository Path**: mousechsh/mousechsh_cli.shell ## Basic Information - **Project Name**: mousechsh_cli.shell - **Description**: MouseChsh命令行环境脚本 ※ MouseChsh Command Line Script ※ 标签Tags:Windows Batch、Linux Bash Shell、WSL - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-01-06 - **Last Updated**: 2023-04-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # MouseChsh命令行环境脚本 本文更新于【2023年1月6日】 # 概述 最初,是为了快速在虚拟机中使用常用的软件,而将常用软件集中在独立的磁盘镜像中,并在根目录中建立bat脚本文件快捷调用。 从只是单纯的定位可执行文件的位置并调用运行,慢慢地在bat脚本文件中增加运行环境判断,运行环境调整的代码。但由于不少软件对各种运行环境有所依赖,因此启动的bat脚本也越来越凌乱。 为了使用上能简便快捷,因此多次将各个bat脚本文件进行整合。参考Windows、Linux的文件组织方式,结合自己的使用习惯,经多次整合形成本环境脚本。 如果只是单纯为了跨电脑使用常用软件,也可以使用诸如PortableApps之类的平台来完成的。做这个说到底还是为了在命令行环境下能够快捷的切换开发环境,省的自己每次都重新配置环境,稍稍的提升一点效率吧。 从结果上来看,这套脚本对于我自己的使用上来说还是成功的。借由脚本的帮助,我使用影子系统把没装过什么软件的系统盘C盘给冻结了,每次重启都会还原到原始状态,也解决了第三方软件和服务拖慢电脑的问题。 不管怎么说,这个命令行环境脚本还只是个玩具级别的代码,也无需给与过高的期待。发布出来也是希望能多少帮到和我有同样需要的你。 # 目标 * 为所有我需要的软件和游戏都制作脚本 * 目前只有Windows版,希望能制作Linux版和Mac版 # 注意事项 * 这里只有脚本,没有相应的软件 * 由于Windows CMD环境使用GBK而有些脚本是UTF-8的,因此尽量在纯英文的目录下使用 # 文件组织结构 文件结构如图所示: ``` 磁盘根目录 | +---+--- x_MouseChsh_x | | | +------- MouseChsh.bat | | | +------- MouseChshProfile.bat | | | +---+--- C | | | +------- bin | | | +------- dev | | | +------- etc | | | +------- lib | | | +------- PROG | | | +------- Project | | | +------- sbin | | | +------- SYS | | | +------- USER | | | +------- var | +---+--- x_MouseChsh_x.x_ZoneName_x | | | +------- MouseChsh.bat | | | +---+-- C | | | +------- bin | | | +------- etc | | | +------- lib | | | +------- PROG | | | +------- sbin | | | +------- SYS | | | +------- USER | | | +------- var ``` 根一层分为两种文件夹:“x_MouseChsh_x”和“x_MouseChsh_x.x_ZoneName_x”。这里的“x_XXXX_x”表示名称是可变的,其中“x_MouseChsh_x”表示主文件夹的名称和每个区域文件夹的名称前缀,在整个脚本中需要统一;“x_ZoneName_x”表示区域的名称,对于同一个主文件夹,同一个区域名称只能出现一次(废话,同目录下也不可能有两个相同的“x_MouseChsh_x.x_ZoneName_x”啦)。 根一层的文件夹最好在磁盘分区的根目录下。同一个根目录下可以有多个主文件夹的,虽然不推荐,如图所示是可以的: ``` 磁盘根目录 | +------- RootA | +------- RootA.ZoneA | +------- RootA.ZoneB | +------- RootB | +------- RootB.ZoneA | +------- RootB.ZoneB | +------- RootC | +------- RootC.ZoneA | +------- RootC.ZoneB ``` 这次提交代码时,只会提交单个主文件夹和一系列区域。主文件夹名称使用“MouseChsh”。 ## 各个文件夹含义 ### C 来源于Windows,表示一个分区,没什么实际用,只能说是从Windows中移植过来的习惯,是思路上的约束,相当于在脚本编写的思考中把这里当作是系统盘根目录来对待。不考虑在此之上(在此之外)的文件调用。 唯一的实际用途大概是有些脚本使用路径字符串中是否有“/C/PROG/”来判断是否为有效路径吧。 ### bin 来源于Linux,存放普通权限的脚本。主文件夹和每个区域文件夹都有。大部分脚本都放在这里。 ### dev 来源于Linux,存放区域信息。原本是管理硬件的文件夹,这里又没有硬件了,就用来管理区域了。仅主文件夹有。 ### etc 来源于Linux,存放配置信息。主文件夹和每个区域文件夹都有。脚本执行时,会从这里寻找配置信息。 ### lib 来源于Linux,存放链接库文件。主文件夹和每个区域文件夹都有。为软件提供运行环境用。 ### PROG 来源于Windows,存放要使用的软件。主文件夹和每个区域文件夹都有。内部按照软件的域名倒序+软件名的方式存放要用的软件。 存放的软件有两种格式: * 直接执行的软件。软件整体以实际运行时的样子放在文件夹中,运行时直接调用可执行程序 * 解压后在执行的文件。软件整理以7z格式压缩在文件中,运行时先解压到临时文件夹中再调用可执行程序 ### Project 自己写代码的区域。非必须,也可置于他处,习惯性只放在主文件夹。放在这里是为了方便使用诸如Syncthing之类的软件同时同步(备份)代码和环境,保护代码安全。 ### sbin 来源于Linux,存放管理员权限的脚本。主文件夹和每个区域文件夹都有。经过UAC提权后可用。 ### SYS 来源于Linux,存放初始化脚本。原本是管理系统的,在这里就认为环境本身就是系统,因此初始化生成这个环境的代码就存到这里了。仅主文件夹有。 ### USER 来源于Windows的“Users”和Linux的“usr”。存放用户文件的。在脚本中用来转移系统的用户文件夹。如,使用符号链接把AppData下的软件运行用数据重定向到这个文件夹下。使用目录联结把Docuemnts、Desktops等文件夹转移过来。 ### var 来源于Linux,存放虚拟环境。原本是Linux程序存放数据和日志的地方,但是觉得这个前缀太像变量了,因此用来存放程序环境中“变”的部分。目前主要是Python的venv虚拟环境在用。独立这个文件是为了给相同的运行时以不同的配置或者库环境。 ## 主文件夹“x_MouseChsh_x” 主文件夹包含脚本入口和一系列环境初始化代码。同一个名称下只能有一个(废话)。 其实将所有软件都放到这里也不是不行。只是软件给软件规下类的话,禁用启用一些列软件时会方便很多。 主文件夹的入口是这个文件夹下的MouseChsh.bat文件,执行后会调用MouseChshProfile.bat文件获取最初的配置变量。之后在逻辑上chroot,切换到SYS中运行初始化脚本。 如果要软件压缩成7z格式的话,需要在主文件夹的 `/C/PROG/org.7-Zip`文件夹内,放入安装好的7z软件。 ## 区域文件夹“x_MouseChsh_x.x_ZoneName_x” 主要用于归类不同的软件,可以有多个,但同一主文件夹下只能有一个同名的区域(废话)。 区域文件夹没有入口,这个文件夹下的MouseChsh.bat文件也不是用来执行的,只是为了在脚本运行时换根变量来实现切换区域的。