如何自动关闭终端窗口而不关闭从终端窗口启动的 GUI 应用程序?

如何自动关闭终端窗口而不关闭从终端窗口启动的 GUI 应用程序?

目前,我正在尝试弄清楚如何从文件资源管理器本身打开 Obsidian Notes Vault(而不是首先打开 Obsidian 并使用 Vault 浏览器)。

为此,以下命令有效(我使用的是 Obsidian Notes Appimage,我更喜欢包样式安装):

#!/bin/bash
/home/username/Desktop/Obsidian-1.5.11.AppImage "obsidian://open?vault=testvault"

(保管库的名称以及保管库文件夹的名称为testvault

我将该命令放入.sh保存在 Vault 文件夹本身中的文件中。

然后,我在保管库文件夹中打开一个终端(打开终端是必要的,因为当双击运行脚本时,该命令无法按预期工作,它不会打开指定的保管库,而只是打开最后打开的保管库),然后运行该.sh文件。

./openvault.sh

现在我想做的是在金库打开后自动关闭终端,而不关闭黑曜石笔记应用程序。

为此,我尝试了以下方法:

#!/bin/bash
/home/username/Desktop/Obsidian-1.5.11.AppImage "obsidian://open?vault=testvault" & disown && exit

# `&&` after `disown` so that `exit` only gets executed after disown is successfully executed

现在这仅部分起作用。它设法执行该disown命令。这样,当我使用终端应用程序的关闭按钮关闭终端时,Obsidian Notes 会继续运行。

但该exit命令不执行。如何使其也执行?

这是运行命令时的终端日志:

2024-03-22 09:26:20 Loading main app package /tmp/.mount_Obsidi8hbnvd/resources/obsidian.asar
xdg-settings: default-url-scheme-handler not implemented for xfce
Received callback URL obsidian://open?vault=tesvault
2024-03-22 09:26:21 Checking for update using Github
2024-03-22 09:26:21 Success.
2024-03-22 09:26:21 Latest version is 1.5.11
2024-03-22 09:26:21 App is up to date.

光标只是在日志的最后一行下方不断闪烁,而不是终端返回到提示符username@machinename:/current/working/directory$

答案1

  1. 脚本在新进程中执行。它本身无法从父交互式 shell 中退出。
  2. 脚本在新进程中执行。dismiss如果他们要退出,就不需要孩子。
  3. 一个脚本可以 kill父进程。 不!
  4. 为了使交互式 shell 因命令而退出,交互式 shell 必须执行此操作。在这种情况下,您可能需要定义一个别名(在我的 bash 手册中,第 6.6 节)或 shell 函数 (3.3) 来运行命令并退出。或者,可以调用脚本,例如exec ./openvault.sh用脚本替换交互式 shell。
  5. 如果程序保持运行一段时间(您的示例似乎表明了这一点),您可能希望将其与终端分离。在 Linux 中,您可以使用 来执行此操作setsid,例如:setsid /home/username/Desktop/Obsidian-1.5.11.AppImage ...
  6. 您最好找出桌面文件中的内容,然后执行此操作。毕竟,您可能会重命名桌面上的文件,或将其移动到文件夹中,...它可能已经是一两个命令了。

相关内容