我尝试这样做:
#!/usr/bin/env sh
name="video.mp4"
ffmpeg -i "$name" -acodec copy output.mp4 | mate-terminal
我想在新打开的终端中查看结果,但当然它不会那样工作。
答案1
这就是所需要的:
mate-terminal -e "bash -c \"ffmpeg -i $name -acodec copy output.mp4;read -p'Press Enter to quit'\""
解释: 我们想要的是运行两个命令(也许还有其他命令)
ffmpeg -i $name -acodec copy output.mp4
read -p'Press Enter to quit'
通过将它们链接在一起bash-c
bash -c "ffmpeg -i $name -acodec copy output.mp4;read -p'Press Enter to quit'"
要将其放在 mate-terminal 的上下文中,我们需要转义两个双引号:
bash -c \"ffmpeg -i $name -acodec copy output.mp4;read -p'Press Enter to quit'\"
伴侣终端-e接受一个参数,给出:
mate-terminal -e "bash -c \"ffmpeg -i $name -acodec copy output.mp4;read -p'Press Enter to quit'\""
答案2
可以肯定的是,终端会话与 shell 并不完全相同。 shell 是一个命令解释器,终端会话打开一个运行 shell [命令解释器] 的新虚拟终端。您还可以将终端窗口视为 shell 的可选包装器,它允许您查看输出并可能与 shell 交互。当正在运行的 shell 终止时,该窗口通常会关闭。
在这种情况下,您可能需要一个交互的shell,它可以执行命令,然后返回提示,以便您可以给它新的命令。为了短跑,这将是要-i
使用的参数。
或者,您可以要求终端仿真器保留窗户打开,即使 shell 已完成执行命令并已终止(因为不进行交互)。例如,使用保持窗口打开的xterm
选项。-hold
因此,要使用 xterm 示例应用此功能,您将需要如下命令:
xterm -hold -e ffmpeg -i "$name" -acodec copy output.mp4
请注意,-e
必须是 的最后一个参数xterm
。