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


22

好的,运行gedit myfile.txt正常。但是,如何使用链接到文件类型的默认桌面应用程序从bash脚本中打开文件呢?

我在下面尝试过,在终端中手动运行时效果很好,但是当我将其放在bash文件中时,什么也没发生:

#!/bin/bash
xdg-open "myfile.txt"&

我该怎么办?

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


1
尝试提供文件的路径..您确定它应该带有引号吗?尝试不加引号
Abhishek 2012年

7
您确定命令什么都不做吗?我只是使用列出的内容创建了一个脚本,然后gedit使用列出的文件打开了该脚本(或在现有会话中打开了一个新标签)。它会立即返回,而不是阻塞直到程序退出。
James Henstridge 2012年

3
另外,从终端运行脚本时会遇到什么错误?
塔卡特2012年

是的 我在脚本中使用了文件的完整路径,但在此处进行了删除以进行澄清。带或不带引号没有区别。我已经试过xtg-open*.txt*.html更多-只是行不通。
工业

5
@abhishek:在这种情况下,没有引号有害的情况,在许多情况下,省略引号可能会引起问题。最好养成始终引用所有字符串的习惯,即使在不必要时也是如此,除非您有特定的理由不这样做。
Scott Severance,2012年

Answers:


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"

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

my_open.sh path/to/somefile.txt

我得到以下输出:

opening file  path/to/somefile.txt  of type  text/plain with  gedit.desktop
finished script

这告诉我文件的路径正确,可以识别mimetype,并且用于打开文件的desktopfile也正确。然后gedit会打开相关文件。

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

my_open.sh path/to/README

我得到以下输出:

opening file  path/to/README  of type  text/x-readme with
finished script

请注意不同的mimetype和丢失的桌面文件。但是,xdg-open将打开所有文本文件的默认设置(gedit)。

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


很好,除了最后吵finished script。我推荐[ catb.org/~esr/writings/taoup/html/](Unix编程的艺术),这是沉默的规则。顺便说一句:不推荐使用反引号-而是使用$(...),它是可嵌套的。
用户未知

2
好吧,该脚本旨在提供其他信息。“完成的脚本”给出的信息是您不需要nohup&,但可以xdg-open返回并让您继续。
xubuntix 2012年

这就是提示的含义。
用户未知

3
真正。只是认为那样会更明显。实际上,不需要整个脚本,因为它只不过xdg-open已经不多了,因此无论如何这都不是一种生产质量的脚本……
xubuntix 2012年

5

将bash脚本test.sh设置为:

#!/bin/bash
gedit myfile.txt

然后,使脚本可执行为:

chmod +x test.sh

最后,运行脚本为:

./test.sh

感谢您的回答,但是不幸的是,如上所述,我需要为该文件打开GNOME的默认文件编辑器。
工业


2

您正在朝正确的方向前进。如果要让gui应用程序在关闭终端窗口时保持打开状态,则只需nohup在该行的开头添加一个即可。

#!/bin/bash
nohup xdg-open "myfile.txt"&

如果gui应用未打开,可能是因为您未DISPLAY在shell中设置环境变量,因此您尝试从中启动它。尝试做回声$DISPLAY


3
xdg-open既不需要nohup也不需要&
xubuntix 2012年

0

问题的第一部分

cat如果需要的话,可以使用命令打开终端内的文件(问题的第一部分已说明)。

要使用它,您只需键入cat FILENAME

其他资讯

如果您需要更多命令: 这是一个很好的命令列表。

GNOME默认编辑器

如果要在GNOME的默认应用程序中打开文件gedit

要使用它,只需键入 gedit FILENAME


这会在终端中打开文件,但不会在GNOME的默认编辑器中打开
工业版

@industrial编辑了我的答案。
Alvar 2012年

不幸的是,开放式也不会工作……
工业版

@Industrial您要什么?进一步解释您的问题!您说了几句话,我已经回答了其中之一,但您说您不想使用它……
Alvar 2012年

@Industrial GNOME中的默认文本编辑器 gedit,又称为“文本编辑器”,因此,如果您运行gedit file.filetype,将根据需要打开文件!
Alvar 2012年

0

虽然我不确定在这里要完成什么工作,但根据最近的评论,单个脚本应该在默认应用程序中打开任何文件,或者在某种程度上该应用程序支持此功能。

如果是这样,那么最简单的方法是打开终端并输入脚本名/ path / to / filename或路径中是否有空格,然后脚本名'/ path / to / filename'

cd; mkdir -p bin && gedit ~/bin/openit1

将此用作脚本,您可以为脚本使用任何名称,我将以openit1为例。最好在直接使用〜/ bin中的脚本来添加数字来命名时,最好不要与任何现有的linux命令冲突

#!/bin/bash
xdg-open "$1"

关闭gedit并在终端中

chmod u+x ~/bin/openit1

重新启动〜/ bin到$ PATH

调用打开终端并转到

openit1 /path/to/filename or openit1 'path/to/filename' 

如原件所述并使用原件。脚本每个脚本一个特定的文件由d&调用。左键单击脚本,您只需要选择“ 运行 ”而不是“在终端中运行”


Restart to add ~/bin to your $PATH-嗯,旧的Windows习惯?;)
未知用户
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.