在 gnome-terminal 中启动命令,然后关闭 gnome-terminal 而不结束执行的命令?

在 gnome-terminal 中启动命令,然后关闭 gnome-terminal 而不结束执行的命令?

我正在摆弄一个有点古怪的东西。我正在寻找一种方法来让启动 MPV(视频播放器)到视频链接变得更容易。MPV 的默认行为是mpv https://url.of.video在终端中启动,或者将 URL 拖放到 MPV 窗口。我觉得这不是一个以键盘为中心的人。相反,我想启动一个弹出框,粘贴 URL,按回车键,然后让 MPV 将视频启动到该 URL。这样,我可以将此命令绑定到键盘快捷键,使整个过程变得非常容易。我已经完成了,但有一个小小的问题——gnome-terminal 窗口挂了。这是一个简单的单行代码:

URL=$(yad --entry) && gnome-terminal -- bash -c "mpv $URL"

如果我启动该命令,我会得到一个弹出框,这要感谢 YAD。此时我粘贴 URL,按回车键,1-2 秒后,MPV 窗口就会打开并显示该视频。太棒了。这正是我想要的。

我提到的纸张切割是指 gnome-terminal 仍在运行。这不是什么大问题,但我想知道是否有办法让上面的命令启动 gnome-terminal、调用 MPV、附加变量 (URL),然后让 gnome-terminal 关闭自身而不结束视频流。

好奇是否有人有任何想法。非常感谢!

答案1

解决您的问题

这里正确的解决方案是首先省略调用甚至设置不需要的变量,所有这些都不是您所需要的gnome-terminalbash

mpv -- "$(yad --entry)"

我添加了引号来正确处理 URL,这确保它可以包含空格和与号 ( &),并且命令仍然有效。--告诉mpv停止寻找选项,而是将您选择的任何内容视为参数。想象一下常见的情况,您在--version启动 mpv 的目录中有一个名为的文件,只需输入此文件名,如何mpv知道是否向您显示其版本字符串或打开文件?

回答你的问题

nohup或者disown可用于将进程与启动它的 shell 分离,请参阅“<command> & disown” 和 “nohup <command> & disown” 之间的区别

对于您来说,正确的解决方案是:

gnome-terminal -e nohup mpv -- "$(yad --entry)"

然而,要获得更好的解决方案,请参见上文。

相关内容