如何从 bash 脚本中打开文件?

Ind*_*ial 22 bash xdg-open

好的,所以跑步gedit myfile.txt效果很好。但是如何使用链接到文件类型的默认桌面应用程序从 bash 脚本内部打开文件呢?

我在下面尝试过,在终端中手动运行时效果很好,但是当我将它放入 bash 文件时,没有任何反应:

#!/bin/bash
xdg-open "myfile.txt"&
Run Code Online (Sandbox Code Playgroud)

我应该怎么做?

请注意,我还需要在终端关闭后使文件保持打开状态。

xub*_*tix 16

我认为你的脚本应该可以工作。但是您可能会添加一些内容以获取更多信息:

#!/bin/bash
T=`xdg-mime query filetype $1`
echo "opening file "  $1  " of type " $T "with " `xdg-mime query default $T`
xdg-open $1
echo "finished script"
Run Code Online (Sandbox Code Playgroud)

在这样的终端中运行此脚本(名为 my_open.sh)时:

my_open.sh path/to/somefile.txt
Run Code Online (Sandbox Code Playgroud)

我得到以下输出:

opening file  path/to/somefile.txt  of type  text/plain with  gedit.desktop
finished script
Run Code Online (Sandbox Code Playgroud)

这告诉我文件的路径没问题,mimetype 被识别,用于打开文件的桌面文件也没有问题。并且 gedit 打开有问题的文件。

现在在另一个文件上运行时:

my_open.sh path/to/README
Run Code Online (Sandbox Code Playgroud)

我得到以下输出:

opening file  path/to/README  of type  text/x-readme with
finished script
Run Code Online (Sandbox Code Playgroud)

请注意不同的 mimetype 和丢失的桌面文件。尽管如此,xdg-open 打开所有文本文件的默认值 (gedit)。

因此,您可能想在脚本中添加类似的内容,看看是否得到了意外的输出(然后可以将其添加到您的问题中...)。

  • 真的。只是觉得那样会更明显。实际上,不需要整个脚本,因为它不会超过 `xdg-open` 已经做到的,所以无论如何这不是一个生产质量的脚本...... (3认同)
  • 好吧,该脚本旨在提供更多信息。'finished script'给出的信息是你不需要`nohup`或`&`,但是`xdg-open`返回并让你继续。 (2认同)

Usm*_*man 5

制作一个 bash 脚本 test.sh 为:

#!/bin/bash
gedit myfile.txt
Run Code Online (Sandbox Code Playgroud)

然后,使脚本可执行为:

chmod +x test.sh
Run Code Online (Sandbox Code Playgroud)

最后,运行脚本:

./test.sh
Run Code Online (Sandbox Code Playgroud)