菜鸟科技网

stor命令具体如何使用?

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

stor命令具体如何使用?-图1
(图片来源网络,侵删)

核心功能与用途

stor 的核心逻辑非常简单:检查路径列表,只要有一个存在,就返回成功;如果所有路径都不存在,才返回失败。

这听起来可能有些奇怪,但它在某些自动化脚本和持续集成/持续部署 流程中非常有用。

主要用途:

  • 条件性执行任务:你希望在某个“标记”文件或目录存在时才执行后续操作,一个部署脚本可能在 deploy/ready 目录存在时才开始部署,否则就跳过。
  • 服务健康检查:检查一组可能的服务日志或状态文件,只要任何一个有更新(即存在),就认为服务是“活跃”的。
  • 构建流程:检查一组可能存在的构建产物,只要有一个存在,就认为构建过程已经部分完成,可以继续下一步。

工作原理与返回码

stor 的行为完全由它的返回码(exit code)决定:

stor命令具体如何使用?-图2
(图片来源网络,侵删)
  • 返回码 0 (成功)只要输入的任何一个路径是存在的(文件或目录),stor 就会立即退出并返回 0。
  • 返回码 1 (失败)只有当输入的所有路径都不存在时,stor 才会退出并返回 1。

示例:

假设我们有以下文件结构:

.
├── existing_file.txt
└── non_existent_file.log
  1. 至少一个存在,返回成功 (0)

    $ stor existing_file.txt non_existent_file.log
    $ echo $?
    0
  2. 全部不存在,返回失败 (1)

    stor命令具体如何使用?-图3
    (图片来源网络,侵删)
    $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)下载预编译的二进制文件。

  1. 访问 releases 页面(https://github.com/user/stor/releases)。
  2. 下载对应你操作系统和架构的文件(如 stor-linux-amd64)。
  3. 将下载的文件移动到你的 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

使用 testfor 循环 (繁琐):

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 会是一个非常得力的助手。

分享:
扫描分享到社交APP
上一篇
下一篇