为什么我无法在终端中运行此命令:
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
答案1
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_text
PATH
open -a
如果运行命令sublime_text
shell 不起作用,则 Sublime Text 尚未正确安装。我从未使用过它,显然它是作为 tar 存档而不是分发包(例如 deb 或 rpm)提供的,因此您可能需要执行额外的安装步骤。这确实是 Sublime Text 的制作者的工作,让这个自动化,但如果他们没有这样做,你可能可以通过运行命令自己做
sudo -s …/sublime_text /usr/local/bin
当然,替换…
为可执行文件所在的路径。sublime_text
您遇到的命令open
是旧名称openvt
命令(某些 Linux 发行版仅将其包含在名称下openvt
)。该openvt
命令创建一个新的虚拟控制台,这只能由 root 完成,并且在本世纪不经常使用,因为大多数人只在图形窗口环境中工作。
答案2
您没有提及您正在使用的操作系统。
在某些 Linux 发行版上,该命令是指向在新虚拟控制台中打开二进制文件的命令open
的符号链接 。openvt
这显然不是你想要的。您的错误消息确实表明您调用了该openvt
命令。该命令需要一个程序二进制文件(可执行文件)作为参数。
我假设您的意思是xdg-open
,与 相比openvt
,它不需要可执行文件作为参数,而是与程序关联并使用该程序打开该文件的文件。您可以将文件和 URL 作为参数传递。
因此xdg-open index.html
应该在浏览器中打开文件,
xdg-open image.png
应该在图像查看器中打开文件等。
答案3
尽管人们经常将其命名xdg-open
为模拟 的功能open
,但 macOSopen
有点不同,因为它 1. 不会从 stdout/stedrr 重定向任何内容,2. 分离您想要从终端运行的任何内容(这几乎总是您在启动 GUI 时想要的)应用程序,这样您就没有终端了)
为了解决这个问题,我使用一些标准的 GNU 工具提出了一个适当的等效方案(语法是 Fish shell,但转换为 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
}
答案4
我的解决方案(每天使用)是使用alias
for xdg-open
。
只需将其放在您的~/.bashrc
:
alias open='xdg-open '
然后关闭并重新启动您的 shell 或source ~/.bashrc
.
现在您可以使用该命令打开任何文件...从 .png 到 .jpg 到 .docx 到 .pdf 到 .txt。