我正在运行 Cygwin。我在 FFmpeg Wiki 中发现了以下 Bash 代码片段FFmpeg 编译指南:
cd /ffmpeg_sources && if cd x265 2> /dev/null; then hg pull && hg update && cd ..; \
else hg clone https://bitbucket.org/multicoreware/x265; fi
据我了解,这是一个非常基本的if
语句,如果 CD 进入目录,则返回非零值x265失败(即如果它不存在),然后从 Mercurial 存储库克隆,这将创建 x265 文件夹,以供下次提取和更新。
失败的错误cd x265
按预期被抑制,但随后我还得到了以下输出:
中止:在‘/ffmpeg_sources’中未找到存储库(未找到.hg)!
这个输出似乎是then hg pull && hg update && cd ..;
语句部分的结果,并且是出乎意料的,因为此时它应该简单地回退到克隆目录。
我唯一想到的是 FFmpeg Wiki 上的代码已经过时了,而且 Mercurial 从那时起就实现了目录定位失败时的致命中止.hg
。我是对的吗,还是我忽略了某些显而易见的东西?
答案1
只是调试你的if
(这是错误的,明显地) 和现存的和不存在目标目录
类似于(根据记忆,抱歉,我现在没有 bash-shell)
if cd x265 2> /dev/null; then echo "The directory exist"; else echo "The directory doesn't exist"; fi
因为现在:
- cd 失败(重新读取部分错误消息“... in'/ffmpeg_sources'”)
- 但执行的是拉取部分而不是克隆部分
它可以是“cd 的退出代码始终为零”
可能的原因描述了这种奇怪的行为这里与解决方案