当前位置: 首页 > article >正文

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"

http://www.kler.cn/news/350850.html

相关文章:

  • 【忍无可忍,无需再忍】永久解决xshell or xftp 更新问题
  • 2021亚洲机器学习会议:面向单阶段跨域检测的域自适应YOLO(ACML2021)
  • iOS 18.2开发者预览版 Beta 1版本发布,欧盟允许卸载应用商店
  • 跨站脚本攻击XSS以及Cookie如何实现用户管理
  • Java【多线程】单例模式
  • openrtp 音视频时间戳问题
  • 无人机之放电速率篇
  • 浙大数据结构:KMP 字符串匹配算法比较
  • linux系统账号安全应该如何设置
  • 第2节 如何学习鸿蒙技术
  • React(四) 事件总线,setState的原理,PureComponent优化React性能,ref获取类组件与函数组件
  • cisco网络安全技术第3章测试及考试
  • excel如何把年龄转换为日期
  • HTML5_标签_各类表格的实现
  • 【排序】——1.冒泡排序法(含优化)
  • 嵌套之美:广义表,在数据层层叠叠之间,展现信息的层次
  • RT-Thread线程的定义和属性
  • 【星闪开发连载】WS63E模组的速度测试
  • 3D 数字人与 2D 数字人的区别
  • 代码随想录算法训练营第八天(1)|哈希表理论基础
  • 线程简单的用例
  • Vue3动态组件component不生效问题解决方法
  • Linux的GDB学习与入门
  • RabbitMQ是什么?
  • 通用数据库对象设计
  • Python酷库之旅-第三方库Pandas(155)