shell错误修改

错误处理

检查ffmpeg和ffprobe命令是否已安装

复制代码
if ! command -v ffmpeg &> /dev/null || ! command -v ffprobe &> /dev/null
then
    echo "ffmpeg或ffprobe未安装,请先安装它们。"
    exit
fi

command -v xxxx
command 是一个内置命令,用于检查命令是否存在。
-v 参数表示要显示命令的路径。如果命令存在,返回其路径;如果不存在,会返回一个错误。

&> /dev/null
&> 将输出和错误都重定向到 /dev/null,即丢弃。
如果命令相关的输出不会显示,保持整洁。

Declare and assign separately to avoid masking return values.

复制代码
"掩盖返回值"的警告通常指的是在声明和赋值中,以某种方式声明变量,导致无意中覆盖或干扰命令替换或其他表达式的返回值。
为了避免在脚本中掩盖返回值,尤其是处理像 ffprobe 这样的命令时,最好将变量的声明与赋值分开。

local video_base
local output_dir
local duration
local segment_duration

video_base="${video_name%.*}"
output_dir="$video_dir/$video_base"

分开声明和赋值:先声明变量,然后赋值,以防止掩盖。

一致的局部作用域:对每个变量使用 local,确保它们不会与任何全局变量冲突。

read without -r will mangle backslashes.

在Shell脚本中,使用 read 命令读取输入时,如果不带 -r 选项,反斜杠(\)会被特别处理,可能导致输入数据的"损坏"或意外修改。

复制代码
read -r -p "所有视频片段已创建于 $output_dir. 是否删除原文件 $video_path? (y/n): " confirm_delete

Prefer mapfile or read -a to split command output (or quote to avoid

splitting).

复制代码
调用 get_files 函数的结果存储到 video_paths 数组中,如果文件路径中包含空格,使用 read -a 会更加安全。使用($(...)) 可能会因为空格导致路径分割成多个数组元素
video_paths=($(get_files "$directory" "${extensions[@]}"))
转为
output=$(get_files "$directory" "${extensions[@]}")
read -r -a video_paths <<< "$output"
相关推荐
weixin_4715257820 分钟前
【gdb/sqlite3移植/mqtt】
linux·运维·服务器
大聪明-PLUS27 分钟前
TCP/IP 协议族—理论与实践(一)
linux·嵌入式·arm·smarc
迎風吹頭髮4 小时前
Linux内核架构浅谈2- Linux内核与硬件交互的底层逻辑:硬件抽象层的作用
linux·架构·交互
孙同学要努力5 小时前
《Linux篇》进程状态——浅度、深度睡眠状态、僵尸状态、运行状态
linux·运维
jieyu11195 小时前
Linux Rootkit 详解
linux·运维·系统安全
宁檬精6 小时前
运维面试准备——综合篇(一)
linux·运维·服务器
洛阳纸贵Coco.Leo.YI6 小时前
10分钟在Windows11下Ubuntu内安装docker-Version28.51
linux·ubuntu·docker
阿巴~阿巴~6 小时前
Ubuntu 20.04 安装 Redis
linux·服务器·数据库·redis·ubuntu
aitav06 小时前
⚡ arm 32位嵌入式 Linux 系统移植 NTP 服务
linux·arm开发·ntp
爱奥尼欧6 小时前
【Linux笔记】网络部分——socket 编程 TCP实现多台虚拟机使用指令访问云服务器
linux·服务器·网络