一行中的多个命令失败

一行中的多个命令失败

在 Linux 上,一行中的多个命令会失败。这是我的命令:

ffmpeg -i video.mp4 2>d.txt && cp ../file1.txt file1.txt

复制命令没有执行,就好像它根本不存在一样。没有给出错误,只是不起作用。如果我不将第一个命令的输出重定向到文件,它就会执行。

因此我尝试在 DOS 上运行该命令以查看是否会引发一些错误,结果出现了以下错误:

意外的“&&”符号。

如果我不将第一个命令的输出重定向到文件中,该命令也会有效。

我想要 Linux 的解决方案。DOS 只是尝试找出一些错误消息。

答案1

您没有看到任何错误消息,因为 STDERR 被重定向到文件 d.txt
cp并且由于 ffmpeg 命令失败而未执行。

command && echo "command gave a return code of 0" || echo "Command gave a non-zero return code"

意思&&是“仅当上一个命令成功时才运行。”

尝试运行不带重定向的 ffmpeg 命令,看看是否会出现错误。另外,执行后立即检查返回代码: ffmpeg -i video.mp4;echo $?
$?是返回代码。(您必须在命令后立即回显或捕获它,否则它将更改为下一个命令的返回代码)。

我敢打赌返回代码不是零。

如果您的目标是无论 ffmpeg 成功与否都运行复制命令,请将 替换&&为分号;
fmpeg -i video.mp4 2>d.txt ; cp ../file1.txt file1.txt

这和下面完全相同:
fmpeg -i video.mp4 2>d.txt
cp ../file1.txt file1.txt
仅一行。
要捕获 ffmpeg 的返回代码以供日后使用,请执行以下操作: fmpeg -i video.mp4 2>d.txt;rc=$?;cp ../file1.txt file1.txt
...
if [ $rc -ne 0 ] ...

如果希望仅当 ffmpeg 命令失败时才复制执行,请将其更改&&||如下形式:
fmpeg -i video.mp4 2>d.txt || cp ../file1.txt file1.txt

相关内容