这里写目录标题
- Shell 内置命令 vs 外部命令
- 内置命令
- 1. `cd` —— **切换当前工作目录**
- 常用例子:
- 2. `export` —— **设置环境变量(供子进程继承)**
- 常用例子:
- 3. `source` —— **在当前 shell 中执行脚本(不新开进程)**
- 常用例子:
- 4. `history` —— **查看历史命令**
- 常用例子:
- 总结对比表
- 它们如何协同工作?(完整例子)
- 外部命令
- cat
- grep
- 基本语法
- 常用选项(flags)
- 实际应用场景(运筹优化相关)
- 小技巧:快速组合
Shell 内置命令 vs 外部命令
| 类型 | 例子 | 特点 |
|---|---|---|
| Shell 内置命令 | cd,export,source,history | 由 shell 自己实现,不依赖外部文件 |
| 外部命令(程序) | cat,nano,python,git,claude | 是磁盘上的可执行文件,shell 负责启动它们 |
💡 你可以用
type命令区分:typecd# cd is a shell builtintypecat# cat is /bin/cattypenano# nano is /usr/bin/nano
内置命令
你提到的这四个命令 ——cd、export、source、history—— 都是shell(如 zsh、bash)的内置命令(built-in commands),它们由 shell 本身直接实现,不依赖外部程序。下面我用简洁清晰的方式为你解释每个命令的作用,并结合你作为运筹优化研究者的实际使用场景。
1.cd——切换当前工作目录
- 全称:change directory
- 作用:进入某个文件夹
常用例子:
cd~/projects/vrp_solver# 进入你的 VRP 算法项目目录cd..# 返回上一级目录cd~# 回到用户主目录pwd# (配合使用)显示当前路径✅为什么重要?
你运行python solve.py时,程序会从当前目录读取数据文件。用cd确保你在正确的项目文件夹里。
2.export——设置环境变量(供子进程继承)
- 作用:定义一个环境变量,让后续启动的程序(如 Python、Claude、Gurobi)能读取它
常用例子:
# 设置 Claude 的任务列表 IDexportCLAUDE_CODE_TASK_LIST_ID=vrp-experiment# 设置 Gurobi 许可证路径exportGRB_LICENSE_FILE=/path/to/gurobi.lic# 查看所有环境变量env|grepCLAUDE✅关键点:
- 普通赋值
VAR=value只在当前 shell 有效,不会传递给子程序export VAR=value会让VAR被Python、Claude、求解器等子进程看到
📌运筹场景:很多求解器(Gurobi/CPLEX)都通过环境变量读取许可证或配置!
3.source——在当前 shell 中执行脚本(不新开进程)
- 作用:运行一个脚本文件,其中的变量和设置会直接影响当前终端环境
常用例子:
# 重新加载 ~/.zshrc 配置(比如你刚加了 export)source~/.zshrc# 激活 Python 虚拟环境(conda/venv 实际就是用 source)sourcevenv/bin/activate⚠️ 对比:
- 直接运行
./script.sh→ 在新进程中执行,退出后变量失效source script.sh→ 在当前 shell中执行,变量和路径修改会保留!
✅运筹场景:
你写了一个setup_env.sh来设置求解器路径,必须用source setup_env.sh才能让当前终端生效。
4.history——查看历史命令
- 作用:显示你之前在终端输入过的命令列表
常用例子:
history# 显示最近几百条命令history|grepclaude# 搜索所有含 "claude" 的历史命令💡快捷技巧:
- 按↑ / ↓ 方向键:快速浏览历史命令
!n:重新执行第 n 条命令(如!1024)!!:重复上一条命令
✅运筹场景:
你昨天跑了一个复杂的实验命令,今天想复现?用history | grep python找回来!
总结对比表
| 命令 | 类型 | 主要用途 | 是否影响当前 shell |
|---|---|---|---|
cd | 内置命令 | 切换目录 | ✅ 是 |
export | 内置命令 | 设置环境变量(供子程序使用) | ✅ 是 |
source | 内置命令 | 执行脚本并继承其环境 | ✅ 是 |
history | 内置命令 | 查看命令历史 | ❌ 否(只读) |
它们如何协同工作?(完整例子)
假设你要为一个 VRP 实验配置环境:
# 1. 进入项目目录cd~/projects/vrp_study# 2. 设置共享任务列表(用于多会话协作)exportCLAUDE_CODE_TASK_LIST_ID=vrp-2026# 3. 激活虚拟环境(实际是 source 一个脚本)sourcevenv/bin/activate# 4. 启动 Claudeclaude# 5. 之后想找回这个命令?history|grepCLAUDE_CODE外部命令
cat
快速显示小文件内容
grep
grep 是一个 shell 外部命令(external command)
grep是Unix/Linux/macOS 系统中最强大、最常用的文本搜索命令之一,它的名字来源于“global regular expression print”(全局正则表达式打印)。
核心作用 :在文件或文本中快速查找包含特定关键词(或模式)的行。
💡 可以把它想象成“命令行里的 Ctrl+F(查找)”,但功能远比图形界面的查找更强大。
基本语法
grep"关键词"文件名例子 1:在日志中找错误
grep"ERROR"solver.log→ 输出所有包含
ERROR的行。例子 2:在代码中找函数调用
grep"solve_vrp"*.py→ 在当前目录所有
.py文件中搜索solve_vrp,并显示匹配的行和文件名。
常用选项(flags)
| 选项 | 作用 | 示例 |
|---|---|---|
-i | 忽略大小写 | grep -i "error" log.txt |
-n | 显示行号 | grep -n "timeout" config.py |
-r | 递归搜索子目录 | grep -r "GUROBI" ./projects/ |
-v | 反向匹配(显示不包含关键词的行) | grep -v "#" config.txt(过滤掉注释) |
-l | 只显示包含匹配项的文件名 | grep -l "main" *.py |
-c | 统计匹配行数 | grep -c "Optimal" results.txt |
实际应用场景(运筹优化相关)
分析求解器输出
# 查看 Gurobi 是否找到最优解grep"Optimal solution found"gurobi.log# 提取运行时间grep"Time"cplex.log批量检查实验结果
# 在所有 result_*.txt 中找 "infeasible"grep"infeasible"result_*.txt配合其他命令使用(管道
|)# 查看历史命令中所有含 "claude" 的history|grepclaude# 查看当前环境变量中与 "TASK" 相关的env|grepTASK过滤数据文件
# 从 VRP 实例文件中提取节点坐标(假设以 NODE 开头)grep"^NODE"instance.vrp
小技巧:快速组合
# 查找并高亮显示(macOS 需安装 GNU grep 或用 --color=always)grep--color=always"solution"output.txt# 同时搜索多个关键词(OR 关系)grep-E"Optimal|Infeasible|Timeout"results.log