语法错误:bash 脚本中出现意外错误“(”——带有!(*.sh)[重复]
- 2024-10-23 08:47:00
- admin 原创
- 80
问题描述:
我想运行一个 sh 文件:
#!/bin/bash
for f in !(*.sh); do
ffmpeg -i "$f" -vf yadif=0:-1 -threads 0 -c:v libx264 -pix_fmt yuv420p \n -r 29.97 -b:v 3000k -s 1280x720 -preset:v slow -profile:v Main \n -level 3.1 -bf 2 -movflags faststart /mnt/media/out-mp4/"${f%.mxf}.mp4"
rm $f
done
但是,我收到以下错误:
2: task1.sh: Syntax error: "(" unexpected
如果我直接在命令行上尝试,它可以完美运行。
路径和权限已经过审核
知道会发生什么吗?
解决方案 1:
这不是“sh 文件”——这是一个bash脚本。如果您使用 运行它sh yourscript
,它将不起作用(因为 extglobs,即您尝试使用的 shell 功能,在 POSIX sh 中不受支持);它只需要使用bash yourscript
,或者./yourscript
在以 启动时使用 运行#!/bin/bash
(因为它确实如此)。因此将其描述为“sh 文件”是误导性的。此外,即使使用 bash,也需要打开扩展的 globbing 功能。
您当前的问题是,这!(*.sh)
不是常规的 glob 语法;它是一个 extglob 扩展,默认情况下不可用。您可能有一个.bashrc
或类似的配置文件,该文件为交互式 shell 启用了此扩展,但这不适用于脚本。运行:
shopt -s extglob
...以启用这些功能。
清理后,您的脚本可能看起来像这样:
#!/bin/bash
shopt -s extglob
# putting settings in an array allows unescaped newlines in definition
# also sorted to make it easier to find things.
settings=(
-b:v 3000k
-bf 2
-c:v libx264
-level 3.1
-movflags faststart
-pix_fmt yuv420p
-preset:v slow
-profile:v Main
-r 29.97
-s 1280x720
-threads 0
-vf yadif=0:-1
)
for f in !(*.sh); do
ffmpeg "${settings[@]}" -i "$f" \n /mnt/media/out-mp4/"${f%.mxf}.mp4" && rm -- "$f"
done
请注意以下除格式之外的变化:
shopt -s extglob
在 glob 扩展之前,它位于自己的行上。rm
仅当成功时才会运行,ffmpeg
因为这些命令之间的分隔符是&&
,而不是;
或裸换行符。--
传递给的参数告诉rm
它将所有未来的参数(在本例中为的内容"$f"
)视为文件名,即使它以破折号开头。参数
"$f"
位于rm
双引号内。
解决方案 2:
您需要在脚本中启用扩展通配符:
shopt -s extglob
还要确保您没有在其他脚本中运行该脚本,例如通过调用sh script.sh
。
解决方案 3:
我认为您正在运行此脚本sh code.sh
。这意味着您正在使用sh
运行脚本,但第一行(#!/bin/bash
)暗示它是为编写的bash
。
在某些系统上sh
和bash
是相同的,但在其他系统上则不同;当以 调用时sh
,和Bash
会关闭一些非 POSIX 功能。因此,使用正确的 shell 和正确的调用非常重要。
使用bash code.sh
或更好的是,使脚本可执行(chmod a+x code.sh
),然后直接运行它(./code.sh
)
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件