有没有办法设置 bash 以便它执行任何带有.sh
扩展名的文件,例如mycommand.sh
,只需键入mycommand
,就像在 Windows 中mycommand.bat
只需键入即可执行一样mycommand
?
我已经使用chmod +x
并将包含的目录放在mycommand.sh
中PATH
,因此无需说明这些内容。
一个明显的方法是重命名mycommand.sh
为mycommand
. 我不想这样做。一些第三方产品(例如 Kafka 和一些数据库系统)提供的 shell 脚本都有.sh
扩展名,我不想重命名我不拥有的东西。
我特别询问是否可以制作.sh
某种“已知”的可执行扩展,类似于 Windows 的PATHEXT
环境变量。
Bash 为您提供了一种定义自己的“找不到命令”处理程序的方法:
(来源)
这是解决您的问题的基本处理程序:
定义此函数后,如果您尝试运行
mycommand
但找不到该命令,shell 将尝试使用所有应该获取mycommand.sh
的命令行参数。mycommand
笔记:
unset
防止处理程序在未找到新命令的情况下再次触发自身。command-not-found
包依赖于它的处理程序。如果您只是定义自己的,您将失去它。要保留旧功能,您需要模仿(或恢复)旧处理程序并在未找到新命令后运行其代码(但要确保它有效地工作,就好像它获得了原始命令,即mycommand
notmycommand.sh
)。在我的另一个答案中,旧处理程序可能看起来像。