如何在脚本中打开新的终端会话,然后与其交互?

如何在脚本中打开新的终端会话,然后与其交互?

我尝试这样做:

#!/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

相关内容