stor 是一个非标准的、但在特定环境下非常流行的命令行工具,它的全称是 "STatus OR",即“状态或”,它主要用于检查多个文件或目录是否存在,只要其中任何一个存在,就返回成功状态(0)。

核心功能与用途
stor 的核心逻辑非常简单:检查路径列表,只要有一个存在,就返回成功;如果所有路径都不存在,才返回失败。
这听起来可能有些奇怪,但它在某些自动化脚本和持续集成/持续部署 流程中非常有用。
主要用途:
- 条件性执行任务:你希望在某个“标记”文件或目录存在时才执行后续操作,一个部署脚本可能在
deploy/ready目录存在时才开始部署,否则就跳过。 - 服务健康检查:检查一组可能的服务日志或状态文件,只要任何一个有更新(即存在),就认为服务是“活跃”的。
- 构建流程:检查一组可能存在的构建产物,只要有一个存在,就认为构建过程已经部分完成,可以继续下一步。
工作原理与返回码
stor 的行为完全由它的返回码(exit code)决定:

- 返回码 0 (成功):只要输入的任何一个路径是存在的(文件或目录),
stor就会立即退出并返回 0。 - 返回码 1 (失败):只有当输入的所有路径都不存在时,
stor才会退出并返回 1。
示例:
假设我们有以下文件结构:
.
├── existing_file.txt
└── non_existent_file.log
-
至少一个存在,返回成功 (0)
$ stor existing_file.txt non_existent_file.log $ echo $? 0
-
全部不存在,返回失败 (1)
(图片来源网络,侵删)$stor /path/to/nothing /another/path/to/nothing $ echo $? 1
安装方法
stor 不是一个系统自带的命令(如 ls, cd),你需要手动安装它,它通常以一个独立的二进制文件形式提供。
在 Linux 上安装
最简单的方法是使用包管理器。
对于 Debian/Ubuntu 系统:
sudo apt update sudo apt install -y stor
对于 Arch Linux 系统:
sudo pacman -S stor
对于 Fedora/CentOS 系统:
# 对于 dnf sudo dnf install -y stor # 对于旧版 yum sudo yum install -y stor
从源码或预编译二进制安装
如果包管理器中没有,你可以从其官方仓库(GitHub)下载预编译的二进制文件。
- 访问 releases 页面(
https://github.com/user/stor/releases)。 - 下载对应你操作系统和架构的文件(如
stor-linux-amd64)。 - 将下载的文件移动到你的
PATH中的某个目录,并赋予执行权限。
# 下载并移动到 /usr/local/bin wget https://github.com/.../stor-linux-amd64 -O /usr/local/bin/stor # 赋予执行权限 sudo chmod +x /usr/local/bin/stor
使用示例
stor 的典型用法是在 if 语句中,作为条件判断。
示例 1:简单的存在性检查
# 检查 /var/log/nginx/error.log 是否存在
if stor /var/log/nginx/error.log; then
echo "Nginx error log exists. Proceeding with analysis."
# ... 执行分析命令 ...
else
echo "Nginx error log not found. Skipping analysis."
fi
示例 2:检查多个可能的位置
假设一个配置文件可能放在 /etc/myapp/config 或 ~/.myapp/config,我们想知道是否至少有一个存在。
if stor /etc/myapp/config ~/.myapp/config; then
echo "Found a configuration file. Starting the application."
./myapp --config /etc/myapp/config # 或使用找到的任何一个
else
echo "ERROR: No configuration file found! Exiting."
exit 1
fi
示例 3:与 (OR) 结合使用
stor 的行为天然适合与 结合。command_a || command_b 的意思是“command_a 失败,则执行 command_b”。
# /mnt/backup/drive 不存在,则挂载它 stor /mnt/backup/drive || sudo mount /dev/sdb1 /mnt/backup/drive
与标准工具的对比
stor 的功能可以通过其他工具组合实现,但 stor 更简洁、可读性更强。
与 test 或 [ ] 对比
使用 test 或 [ ] 实现类似功能需要循环,比较繁琐。
使用 stor (简洁):
if stor file1.txt file2.txt file3.txt; then
echo "At least one file exists."
fi
使用 test 和 for 循环 (繁琐):
files_exist=false
for file in file1.txt file2.txt file3.txt; do
if [ -e "$file" ]; then
files_exist=true
break
fi
done
if [ "$files_exist" = true ]; then
echo "At least one file exists."
fi
与 ls 对比
错误的做法:
# 不要这样做!如果文件不存在,ls 会报错
if ls file.txt > /dev/null 2>&1; then
echo "File exists."
fi
这个方法的问题是,ls 的成功退出码只表示它能成功列出内容,而不是文件一定存在(ls / 总是成功的),如果文件不存在,它会打印错误信息到标准错误,需要重定向,这不够优雅。
| 特性 | 描述 |
|---|---|
| 全称 | STatus OR (状态或) |
| 核心逻辑 | 检查路径列表,只要有一个存在就返回成功。 |
| 返回码 0 | 至少一个路径存在。 |
| 返回码 1 | 所有路径都不存在。 |
| 主要用途 | 在脚本中进行“或”逻辑的文件/目录存在性检查。 |
| 优点 | 语法简洁、可读性高,专为该场景设计。 |
| 缺点 | 非标准命令,需要额外安装。 |
stor 是一个小而美的工具,它解决了一个非常具体的编程问题,并用最优雅的方式呈现,如果你经常需要编写需要检查多个文件是否存在脚本的 shell 脚本,stor 会是一个非常得力的助手。
