【问题标题】:bash script variable content in cmd line interpreted as filename by mplayercmd 行中的 bash 脚本变量内容被 mplayer 解释为文件名
【发布时间】:2018-12-02 22:15:19
【问题描述】:

我有一个通过 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 行直接显示选项,电影是二维显示的

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 .  

我怎样才能防止这种情况发生?

【问题讨论】:

    标签: bash variables command-line mplayer interpretation


    【解决方案1】:

    您传递的" -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 不支持多维数组,因此这可能需要对您的脚本进行一些更深入的更改。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-07
      • 1970-01-01
      • 2013-05-18
      • 2015-11-13
      • 2021-12-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多