![如果没有找到命令则执行文件](https://linux22.com/image/55152/%E5%A6%82%E6%9E%9C%E6%B2%A1%E6%9C%89%E6%89%BE%E5%88%B0%E5%91%BD%E4%BB%A4%E5%88%99%E6%89%A7%E8%A1%8C%E6%96%87%E4%BB%B6.png)
当我尝试在 Linux 中执行文件时,我总是因为需要编写./executablefile
而不仅仅是executablefile
.我明白为什么这样做,所以它不会有不明确的输入,一个是命令,也是一个文件。
但我希望它在找不到命令时执行该文件(命令具有优先级)。我通过指南进行了调整,如果您编写一个命令但没有找到它,它会在pacman
数据库中搜索它并告诉我该命令位于哪个包中,所以我知道当它说时可以执行某些操作command not found
。
有没有好的方法可以做到这一点?
答案1
最简单(但通常有禁忌)的方法是简单地在 shell 启动脚本末尾附加./
到环境变量,如下所示(bash/sh 变体):PATH
export PATH=$PATH:./
这将导致 shell 在在本地目录中查找命令之前首先尝试所有常用目录。
注意:使用时请自行承担风险,并且绝对不要以 root 身份执行此操作。
答案2
我在用着command-not-found version: 0.2.44
。如果未找到命令,则执行一个名为的函数command_not_found_handle()
,并且它提供相似命令的列表。
按如下方式编写函数(只需将其复制粘贴到终端中,它不是永久的):
command_not_found_handle ()
{
if [ -x $1 ]; then
echo "executing ./$1"
./$1
return $?;
fi
if [ -x /usr/lib/command-not-found ]; then
/usr/bin/python /usr/lib/command-not-found -- "$1";
return $?;
else
if [ -x /usr/share/command-not-found/command-not-found ]; then
/usr/bin/python /usr/share/command-not-found/command-not-found -- "$1";
return $?;
else
printf "%s: command not found\n" "$1" 1>&2;
return 127;
fi;
fi
}
我编辑了前几行。例如,当您键入foobar
now 并且未找到该命令时,它会在当前文件夹中查找是否存在名为的文件foobar
,如果该文件是可执行文件 ( -x
),则它将被执行 ( ./$1
)。echo
如果需要,您可以删除该行。
为了使其永久:
该函数通常在文件中定义/etc/bash.bashrc
。您可以将该函数附加到您的~/.bashrc
文件中。这将覆盖 中的部分/etc/bash.bashrc
。
答案3
将文件放入 /usr/bin 中,然后只需输入名称即可执行它。制表符补全也在那里工作