如果没有找到命令则执行文件

如果没有找到命令则执行文件

当我尝试在 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
}

我编辑了前几行。例如,当您键入foobarnow 并且未找到该命令时,它会在当前文件夹中查找是否存在名为的文件foobar,如果该文件是可执行文件 ( -x),则它将被执行 ( ./$1)。echo如果需要,您可以删除该行。

为了使其永久:

该函数通常在文件中定义/etc/bash.bashrc。您可以将该函数附加到您的~/.bashrc文件中。这将覆盖 中的部分/etc/bash.bashrc

答案3

将文件放入 /usr/bin 中,然后只需输入名称即可执行它。制表符补全也在那里工作

相关内容