通过键入名称打开 PDF 文件

top*_*kip 5 shell bash command-not-found

我在 Mac OS X 上,我通常从终端打开 PDF 文件(使用 bash)

open myfile.pdf
Run Code Online (Sandbox Code Playgroud)

现在我只能打字

myfile.pdf
Run Code Online (Sandbox Code Playgroud)

并使用上面的命令打开它。有没有机会配置 bash 来为我运行该命令?如果这仅适用于 PDF 文件,我会很高兴,但当然欢迎使用更通用的解决方案。

实际上,它不仅仅是为了节省几次按键。如果一个解决方案需要我花两个小时,我怀疑我是否会在接下来的几年里少按两次键来节省这么多时间。我想了解这是否可行以及如何实现。

pbm*_*pbm 8

有一种方法可以将此功能添加到bash.

当您尝试“运行”文件时,bash 将发出command not found错误:

$ 1.pdf
bash: 1.pdf: command not found
Run Code Online (Sandbox Code Playgroud)

之后它也会发出ERR“信号”。使用 buildintrap您可以捕获这种类型的信号并定义将处理错误的函数。

在该页面上,您可以找到将处理该错误的脚本(另请阅读解释)。

脚本有很好的注释,因此根据您的需要修改它应该不是问题。

捕获ERR后检查最后一条命令的错误代码。如果是错误2、126 或 127,它将继续。在下一步中,它将检查最后一个命令并将其拆分为命令部分和参数。

首先if..fi“处理涉及忘记前导斜杠的可能错误”,以便您可以将其删除。

在请求下if一条语句时,会检查您的命令是否是目录,因此也可以将其删除。更有趣的是第二部分if- 脚本检查文件类型并打印一些如何打开该类型文件的建议。取而代之的是,您可以放置​​类似open $cmd或的内容APPLICATION_TO_OPEN_PDF $cmd(当然您需要添加检查文件是否为 PDF)。

安全说明:如果您想使用该功能,您应该使用而APPLICATION_TO_OPEN_PDF $cmd不是open $cmd. 您还应该为特定文件类型设置操作,不要对所有类型的文件使用 open 或 exec 以避免运行一些恶意脚本或类似的东西。


还有另一种方法可以做到这一点,但我认为它可能会导致一些问题,因为它更具侵入性。

您可以重新定义函数command_not_found_handle()并将检查和opens放在那里。这将导致不会有错误消息,但我不确定在您不想处理的情况下它会如何处理错误代码和消息。


Gil*_*il' 6

在zsh中,定义了一个后缀的别名在.zshrc:

alias -s pdf=open
Run Code Online (Sandbox Code Playgroud)

zsh一般比bash具有更好的交互特性和更好的编程特性。它至少从 10.4 开始就随 Mac OS X 一起提供。