将"man"替换为"?"

Jan*_*ary 3 unix linux bash alias manpage

我经常使用R.在R中,您可以通过编写来调用函数的手册页

?print
Run Code Online (Sandbox Code Playgroud)

我已经习惯了这么多,我也间歇性地在bash shell窗口中键入它.现在,我已经设置了一个别名

?='man'
Run Code Online (Sandbox Code Playgroud)

几乎可以削减它:例如,我可以做到? ls.但是,我更愿意与之合作?ls.不幸的是,这个不起作用.当我输入没有空格的问号后,有没有办法让bash调用手册页?

che*_*ner 11

bash提供了一个用于处理未定义命令的钩子.由于您不太可能拥有名称以其开头的任何命令?,因此您可以使用此钩子来处理运行此类命令的任何尝试:

command_not_found_handle () {
    if [[ $1 =~ ^\? ]]; then
        cmd=${1#\?}
        man $cmd
    else
        echo "$1: command not found" >&2
        return 127
    fi
}
Run Code Online (Sandbox Code Playgroud)

此函数将进入您的.bashrc文件,因此它可以在任何shell中使用.当你尝试执行时

$ ?ls
Run Code Online (Sandbox Code Playgroud)

如果找不到该命令,则挂钩截获失败的尝试以查找命令,确定命令名称的开头?,然后剥离?并将结果作为参数传递给man.其他未定义的命令仅产生类似于bash未知命令的默认错误的错误消息,状态为127的退出(相同的状态bash通常用于表示未找到命令).

  • 但要小心,`?`在bash中有特殊含义.试试`touch cls; ?ls`. (4认同)