![](./img.png)
# 环境安装与卸载脚本

这个仓库提供了一组独立的 Shell 脚本，用于安装和卸载常见开发环境工具，适合在 Linux 和 macOS 上快速初始化开发机器。

## 文件说明

- `install.sh`：总安装入口，支持交互式选择或命令行按需安装。
- `install-docker.sh`：单独安装 Docker。
- `install-nvm.sh`：单独安装 NVM，并自动安装 Node.js LTS。
- `install-mambaconda.sh`：单独安装 Mambaconda，默认安装到 `$HOME/mambaconda`。
- `tmp.log`：安装过程日志示例文件，用于排查安装问题和核对执行输出。
- `uninstall.sh`：总卸载入口，支持交互式选择或命令行按需卸载。
- `uninstall-docker.sh`：单独卸载 Docker，默认保留 Docker 数据。
- `uninstall-nvm.sh`：单独卸载 NVM，并清理脚本追加的 Shell 初始化配置。
- `uninstall-mambaconda.sh`：单独卸载 Mambaconda，并清理脚本追加的 Shell 初始化配置。

## 支持平台

- Linux
- macOS

## 安装用法

总入口安装：

```bash
bash install.sh
```
自用conda、nvm
```bash
wget https://raw.githubusercontent.com/ice-a/env/master/install_muzi.sh

# 后续步骤同上：赋权 + 执行
chmod +x install_muzi.sh
./install_muzi.sh
```
常见用法：

```bash
bash install.sh all
bash install.sh docker
bash install.sh nvm mambaconda
```

也可以直接执行单独脚本：

```bash
bash install-docker.sh
bash install-nvm.sh
bash install-mambaconda.sh
```

`install.sh` 支持以下模式：

- 不带参数：交互式选择安装项
- `all`：安装全部工具
- `docker` / `nvm` / `mambaconda`：安装指定工具
- 多个参数组合：安装多个指定工具

## 卸载用法

总入口卸载：

```bash
bash uninstall.sh
```

常见用法：

```bash
bash uninstall.sh all
bash uninstall.sh docker
bash uninstall.sh nvm mambaconda
```

也可以直接执行单独脚本：

```bash
bash uninstall-docker.sh
bash uninstall-nvm.sh
bash uninstall-mambaconda.sh
```

`uninstall.sh` 支持以下模式：

- 不带参数：交互式选择卸载项
- `all`：卸载全部工具
- `docker` / `nvm` / `mambaconda`：卸载指定工具
- 多个参数组合：卸载多个指定工具

## 默认行为说明

- `install-nvm.sh` 会配置 Node.js 国内镜像和 npm 国内源。
- `install-mambaconda.sh` 会写入 `~/.condarc`，并使用国内镜像源。
- `install-mambaconda.sh` 默认会安装 Python 3.10。
- `uninstall-docker.sh` 默认不会删除 Docker 数据目录。

## 关于 `tmp.log`

仓库中的 `tmp.log` 是一次安装过程的输出日志示例，主要用于：

- 查看脚本在真实环境中的执行顺序
- 排查下载失败、权限不足、源不可达等问题
- 核对安装完成后的版本输出和提示信息

常见查看方式：

```bash
cat tmp.log
tail -n 50 tmp.log
grep ERROR tmp.log
grep WARN tmp.log
```

说明：

- `tmp.log` 不是脚本运行时强制生成的文件，它更像一份调试或留档日志。
- 如果你需要记录自己的安装过程，可以手动重定向输出，例如：

```bash
bash install.sh all > tmp.log 2>&1
```

- 如果终端里看到中文乱码，通常是终端编码问题，不一定是日志内容损坏。

如果需要在卸载 Docker 时同时删除数据，可使用：

```bash
REMOVE_DOCKER_DATA=1 bash uninstall-docker.sh
```

## 安装后验证

```bash
docker --version
docker compose version
nvm --version && node --version && npm --version
conda --version && python --version
```

## 输出风格

现在所有入口脚本和子脚本都会使用统一的输出格式：

- `INFO`：普通步骤提示
- `WARN`：非阻断警告
- `ERROR`：错误并退出
- `DONE`：当前脚本执行完成

同时会显示阶段标题，便于在安装或卸载过程中快速定位当前步骤。
