我使用的是 Mac OS X,通常从终端打开 PDF 文件(使用 bash)
open myfile.pdf
现在我只能打字
myfile.pdf
并使用上面的命令打开它。是否有机会配置 bash 来为我运行该命令?如果这仅适用于 PDF 文件,我会很高兴,但当然欢迎更通用的解决方案。
其实它并不纯粹是为了节省一些击键次数。如果一个解决方案需要我两个小时,我怀疑在接下来的几年里我会通过减少两次按键来节省这么多时间。我想了解这是否可能以及如何实现。
答案1
有一种方法可以将这个功能添加到bash
.
当您尝试“运行”文件时,bash 将发出command not found
错误:
$ 1.pdf
bash: 1.pdf: command not found
之后它也会发出ERR
“信号”。使用内置功能,trap
您可以捕获这种类型的信号并定义处理错误的函数。
脚本有很好的注释,因此根据您的需要修改它应该不成问题。
抓到后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()
并将检查和open
s 放在那里。这将导致不会出现错误消息,但我不确定在您不想处理的情况下它将如何处理错误代码和消息。
答案2
在 zsh 中,定义一个后缀别名在你的.zshrc
:
alias -s pdf=open
zsh 一般比 bash 具有更好的交互功能和更好的编程功能。至少从 10.4 版本开始,它就随 Mac OS X 一起提供。
答案3
open
我想你可以为名称创建一个别名o
,然后输入
o myfile.pdf
虽然我不知道这是否可以节省您打字的时间open
:-) 在任何情况下都必须指定文件名。
所以对于别名:
alias o="open"
应该进入你的~/.bashrc file