打开命令以在应用程序中打开文件


13

为什么我不能在终端中运行此命令:

open index.html

它不是应该在我的浏览器中打开此文件吗?我也不能运行以下命令:open index.html -a "Sublime Text"。这些命令的结果是:

$ open index.html
Couldn't get a file descriptor referring to the console

$ open index.html -a "Sublime Text" - 
open: invalid option -- 'a' 
Usage: open [OPTIONS] -- command

2
我认为您的意思xdg-open是应该在浏览器中打开文件。该open命令是该命令的链接,openvt并在新的虚拟控制台中打开二进制文件。那显然不是您想要的。
Marco

1
假设您使用的是OSX系统?我不相信openLinux上有任何命令。
slm

1
正如Marco指出的那样,@ slm open在Linux上有一个命令链接到openvt;问题中的错误消息与该情况一致。
斯蒂芬·基特

xdg-open filename_or_URL
Ijaz Ahmad Khan

1
@EdgarOliveira如果要打开程序(二进制文件),只需在终端中键入其名称。如果要使用关联的程序打开文件,请使用xdg-open <file>,它应使用相应的程序打开文件。
Marco Marco

Answers:


18

OS X open命令的主要目的是在关联的应用程序中打开文件。等效于现代非OSX unice xdg-open

xdg-open index.html

xdg-open没有等效的OSX open -a在特定应用程序中打开文件。这是因为在应用程序中打开文件的通常方法是简单地键入应用程序的名称,然后键入文件名。更准确地说,您需要键入实现应用程序的可执行程序的名称。

sublime_text index.html

Linux与其他Unix系统一样(据我所知,不是OS X的非Unixy部分),通过使用包管理器跟踪软件来管理软件,并将各个文件放在使用它们的位置。例如,所有可执行程序都在一小组目录中,而所有这些目录都在PATH变量中列出;运行会在中列出的目录中sublime_text查找一个名为的文件。OS X需要通过的额外间接级别来处理在单个目录树中解压缩并在应用程序数据库中注册的应用程序。Linux没有任何应用程序数据库,但是它的组织方式使其不需要数据库。sublime_textPATHopen -a

如果运行命令sublime_text外壳对您不起作用,则表明Sublime Text未正确安装。我从未使用过它,显然它是作为tar存档而不是作为分发包(例如deb或rpm)来提供的,因此可能需要执行额外的安装步骤。Sublime Text的制造商真正要做的是自动完成此工作,但是如果他们还没有做到这一点,您可以自己运行命令来完成

sudo -s …/sublime_text /usr/local/bin

当然,用sublime_text可执行文件所在的路径替换。

open您遇到的命令是该命令的旧名称openvt(某些Linux发行版仅在名称下包含该命令openvt)。该openvt命令创建了一个新的虚拟控制台,该控制台只能由root用户完成,在本世纪并不经常使用,因为大多数人只在图形窗口环境中工作。


但是,如果我运行此命令“ sublime_text indext.html”,则会收到此结果“ sublime_text:未找到命令”,如何导致该问题?
Edgar Oliveira

@EdgarOliveira我认为我看到了问题,显然Sublime Text没有附带适当的软件包?看到我的编辑。
吉尔(Gilles)'所以

我为此创建了一个别名:alias sublimetext ='/ opt / sublime_text / sublime_text / home / user / Documents / sandbox / webdeveloper',但是当我执行“ sublimetext”时,打开了两个窗口,而不是只有一个!为什么?谢谢
埃德加·奥利维拉

当我更改文件.bashrc时,我有一个疑问:“如何重设文件.bashrc以在执行更改的同一终端上执行新的别名?” Google在Unix和Linux上找到了答案,只有您执行了命令“ bash”,然后运行您的新别名:)
Edgar Oliveira 2016年

7

您没有提到您使用的操作系统。

在某些Linux发行版中,该open命令是该命令的符号链接,该 openvt命令在新的虚拟控制台中打开二进制文件。那显然不是您想要的。您的错误消息确实表明您已调用该openvt命令。该命令期望程序二进制文件(可执行文件)作为参数。

xdg-open与相比openvt,我假设您的意思是不希望将可执行文件作为参数,而是将文件与程序关联并使用该程序打开文件。您可以将文件和URL作为参数传递。

因此,xdg-open index.html应在浏览器中 xdg-open image.png打开文件,在图像查看器中打开文件,等等。


1
唯一的问题是xdg-open将在默认应用程序中打开该文件类型的文件。您无法使用xdg-open选择应用程序。我不知道是否有命令选择应用程序,但是如果您知道该应用程序(例如示例“ Sublime Text”),则最好直接调用该程序。
X3MBoy

1
@ X3MBoy xdg-open调用的想法是为该文件调用默认应用程序。如果您想使用其他程序,只需致电<program> <file>。我看不到问题。
Marco Marco

他要求执行一些命令:open index.html -a "Sublime Text" -这就是为什么我说“问题”,因为如果您xdg-open用来打开html文件,则有更好的机会由浏览器而不是诸如“ Sublime Text”之类的文本编辑器打开该文件
X3MBoy

3

尽管人们通常将其命名xdg-open为模仿的功能open,但macOS open还是有点不同,因为它1.不会从stdout / stedrr重定向任何内容,并且2.将从终端运行的任何内容分离出来(这几乎总是启动GUI时所需的内容)应用程序,这样您就不会有终端摆放)

为了解决这个问题,我使用了一些标准的GNU工具(语法是鱼壳,但是到bash的转换是微不足道的),提出了一个适当的等效项:

function open
    for i in $argv
        setsid nohup xdg-open $i > /dev/null 2> /dev/null
    end
end

新增

对于使用bash shell的用户,以下是函数:

open ()
{
    for i in $*
    do
        setsid nohup xdg-open $i > /dev/null 2> /dev/null
    done
}

2

我的解决方案(每天使用)是使用aliasfor xdg-open

只需将其放在您的~/.bashrc

alias open='xdg-open '

然后关闭并重新启动Shell或source ~/.bashrc

现在,您可以使用该命令打开任何文件...从.png到.jpg到.docx到.pdf到.txt。

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.