无法识别控制台应用程序的 xdg-open 行为

无法识别控制台应用程序的 xdg-open 行为

我为一个控制台应用程序创建了文件关联,该应用程序接受来自 stdin 的输入并在 stdout 上输出。当我使用 ./myExe 从终端运行该应用程序时,它可以正常工作。但是当我使用 xdg-open 'myFile' 启动 exe 时,它​​会在终端上发出 stdout,但它不接受来自 stdin 的任何输入(它从 /dev/null 接受输入)。

我无法确定这是标准行为还是我遗漏了什么。如果这是标准行为,那么为什么 stdout 可用?我正在使用 Ubuntu 20.04。

Note : Both stdin and stdout are available when I use xdg-open through a ssh session.

答案1

这是标准行为。

  • 在交互式终端中,标准输入和输出附加到终端:标准输入默认是键盘,标准输出和标准错误是屏幕上的终端输出。

  • 在后台终端会话中运行的程序会将输出显示到屏幕上,但不会接受来自键盘的输入。使用命令启动的程序xdg-open在系统中作为单独的线程运行,独立于终端会话,就像您通过单击文件管理器中的文件来启动应用程序一样。一旦应用程序启动,就会xdg-open终止并释放您的终端以供您进一步输入。如果您发出命令bg,您确实会看到终端中没有后台进程。

  • 从图形桌面环境启动的程序/进程(即单击菜单中的图标后、启动文件后、在运行对话框中输入命令后)未连接到终端,因此看不到输入或输出。

标准输入/输出可以重定向到文件或其他设备。

相关内容