如何在 Bash 或 zsh 中执行之前处理 shell 输入?

如何在 Bash 或 zsh 中执行之前处理 shell 输入?

大家好,我是 bash/zsh 用户(Linux)。我想实现以下事情。

首先,在 bash/zsh shell 中输入命令,例如:

$ 精彩的:

事实上,名为“wonderful:”的程序并不存在。我想要的是在 shell 执行命令之前用函数(或程序)处理输入字符串更具体地说,当命令输入是“wonderful:”时,shell 会将输入传递给我的函数/程序,这就是 shell 所做的全部。

有办法实现吗?bash 或 zsh 都可以。非常感谢您的关注!

答案1

您可以定义一个名为的函数command_not_found_handle,当输入的命令未找到时,该函数将被调用。bash 4.0 或更高版本支持此功能;等效zsh函数是名称类似的command_not_found_handler

这是一个简单的例子,它拦截了 的拼写错误printf,但将任何其他未知命令保留为未知。

command_not_found_handle () {
    if [[ $1 == pirntf ]]; then
        printf "${@:2}"
    else
       printf "Command not found: $1"
       return 127
    fi
}

答案2

也许你需要的是Bash 别名。别名允许您将“wonderful”定义为命令。请参阅教程。例如,您可以添加:

alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
# -> Prevents accidentally clobbering files.
alias mkdir='mkdir -p'

到您的 ~/.bashrc 文件。

在您的情况下,您可以将“wonderful”别名为处理参数或输入的脚本,然后调用其他命令。

相关内容