You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在bash脚本ezkill中复用类打印机页面设置的PID输入解析功能?

完美解决你的需求:复用现成工具/函数实现PID范围输入

这种类似打印机页面的范围输入格式真的太实用了,完全没必要自己从头造轮子!下面给你几个现成的解决方案,直接拿来用就行:

方案1:直接复用bash函数(零依赖,纯bash实现)

这个函数专门处理数字范围的展开,支持单个PID、连续范围(比如123-127)、枚举(比如123,125)以及混合模式,完全符合你的需求:

expand_pid_range() {
    local input="$1"
    # 将逗号分隔的部分拆分成每行处理
    echo "$input" | tr ',' '\n' | while read -r segment; do
        # 判断当前段是范围还是单个PID
        if [[ "$segment" == *-* ]]; then
            # 拆分范围的起始和结束值
            local start=${segment%-*}
            local end=${segment#*-}
            # 验证是否为有效数字
            if [[ ! "$start" =~ ^[0-9]+$ || ! "$end" =~ ^[0-9]+$ ]]; then
                echo "错误:无效的范围格式 '$segment'" >&2
                return 1
            fi
            # 生成连续PID序列
            seq "$start" "$end"
        else
            # 验证单个PID是否为有效数字
            if [[ ! "$segment" =~ ^[0-9]+$ ]]; then
                echo "错误:无效的PID '$segment'" >&2
                return 1
            fi
            echo "$segment"
        fi
    done
}

怎么用在你的ezkill脚本里?

只需要把这个函数加到脚本里,然后调用它处理用户输入的PID参数:

# 假设用户输入的PID范围是第一个参数
pid_input="$1"
# 展开所有PID
expanded_pids=$(expand_pid_range "$pid_input")

# 遍历执行kill操作(可以加额外验证,比如检查PID是否存在)
for pid in $expanded_pids; do
    if ps -p "$pid" > /dev/null 2>&1; then
        echo "正在终止PID $pid..."
        kill "$pid"
    else
        echo "警告:PID $pid 不存在,跳过" >&2
    fi
done

方案2:用现成的命令行工具(更简洁)

如果你的系统允许安装额外工具,numrange是个绝佳选择——它就是专门用来处理这种数字范围展开的工具,支持你需要的所有格式:

安装方法(以Debian/Ubuntu为例)

sudo apt install numrange

使用示例

直接传入你的范围字符串,它会输出所有展开后的数字:

numrange "123-127,130,135-138"
# 输出:123 124 125 126 127 130 135 136 137 138

把它整合到你的ezkill脚本里也很简单:

pid_input="$1"
expanded_pids=$(numrange "$pid_input")

# 后续的kill逻辑和上面一样
for pid in $expanded_pids; do
    # ... 执行kill操作
done

小提示

不管用哪种方案,都建议在kill前加一步PID存在性检查,避免误操作或者报错。另外,如果需要支持强制终止(比如kill -9),可以把kill命令改成kill -9 "$pid"即可。

内容的提问来源于stack exchange,提问作者kraymer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:18:02