bash cmd 行中的脚本变量内容被 mplayer 解释为文件名
bash script variable content in cmd line interpreted as filename by mplayer
我有一个通过 mplayer 播放电影的脚本,我试图为此添加 3D 到 2D 的自动转换。这是脚本中出现的相关 cmd 行
mplayer -fs "${g[$i]}" -ss $f "${d%.*}".* -hardframedrop -nocorrect-pts -identify &>> log.txt
即使“${g[$i]}”具有所需的选项,这也不会呈现为 2D
echo "${g[$i]}"
-vo gl:stereo=3
但是如果我修改cmd 行直接显示选项,电影显示为2D
mplayer -fs -vo gl:stereo=3 -ss $f "${d%.*}".* -hardframedrop -nocorrect-pts -identify &>> log.txt
问题似乎是 mplayer 在通过 ${g[$i]} 传送时将选项解释为文件名,因此来自 log.txt
Playing -vo gl:stereo=3 .
File not found: ' -vo gl:stereo=3 '
Failed to open -vo gl:stereo=3 .
我怎样才能避免这种情况?
您传递的 " -vo gl:stereo=3 "
确实无效。您应该传递 "-vo"
,然后传递 "gl:stereo=3"
。换句话说,它应该作为两个单独的参数传递,没有前导和尾随空格。
最简单的解决方法是跳过 ${g[$i]}
:
周围的引号
mplayer -fs ${g[$i]} -ss $f "${d%.*}".* -hardframedrop -nocorrect-pts -identify &>> log.txt
更可靠的解决方法是将参数单独存储在一个数组中,例如opts=("-vo" "gl:stereo=3")
并使用 "${opt[@]}"
,但 Bash 不支持多维数组,因此这可能需要对您的脚本进行一些更深入的更改。
我有一个通过 mplayer 播放电影的脚本,我试图为此添加 3D 到 2D 的自动转换。这是脚本中出现的相关 cmd 行
mplayer -fs "${g[$i]}" -ss $f "${d%.*}".* -hardframedrop -nocorrect-pts -identify &>> log.txt
即使“${g[$i]}”具有所需的选项,这也不会呈现为 2D
echo "${g[$i]}"
-vo gl:stereo=3
但是如果我修改cmd 行直接显示选项,电影显示为2D
mplayer -fs -vo gl:stereo=3 -ss $f "${d%.*}".* -hardframedrop -nocorrect-pts -identify &>> log.txt
问题似乎是 mplayer 在通过 ${g[$i]} 传送时将选项解释为文件名,因此来自 log.txt
Playing -vo gl:stereo=3 .
File not found: ' -vo gl:stereo=3 '
Failed to open -vo gl:stereo=3 .
我怎样才能避免这种情况?
您传递的 " -vo gl:stereo=3 "
确实无效。您应该传递 "-vo"
,然后传递 "gl:stereo=3"
。换句话说,它应该作为两个单独的参数传递,没有前导和尾随空格。
最简单的解决方法是跳过 ${g[$i]}
:
mplayer -fs ${g[$i]} -ss $f "${d%.*}".* -hardframedrop -nocorrect-pts -identify &>> log.txt
更可靠的解决方法是将参数单独存储在一个数组中,例如opts=("-vo" "gl:stereo=3")
并使用 "${opt[@]}"
,但 Bash 不支持多维数组,因此这可能需要对您的脚本进行一些更深入的更改。