如何使程序帮助文本自动管道更少?

Modified on: Sat, 30 Jun 2018 11:06:00 +0800

刚才,dpkg --help在我脸上吐了三页输出。我可能对前十行感兴趣,这些行显示了一般用法和最常见的参数。

我想那样,每当我运行一个程序(任何程序)时,--help作为唯一参数,如果输出长于$(tput lines),它将自动通过less传送。在bash中它是否容易实现?

编辑最后,对我来说最好的解决方案是切换到zsh。 ~/.zshrc中的以下任一片段都可以完成这项任务;每个人都有自己的权衡:

# Modify the input line before it runs
function lessify() {
    if [[ "$BUFFER" =~ " --help$" ]] ; then
        BUFFER="$BUFFER | less -FX"
    fi  
    zle accept-line
}

zle -N lessify_widget lessify
# Bind to the Enter key
bindkey '^M' lessify_widget

# Alias --help ; ignore rest of the line 
alias -g -- --help="--help | less -FX ; true "

此外,在研究这个问题时,我可能浪费了更多的时间,而不是拯救我。不要后悔一点。

作者:,Mihai

最佳答案

bash中,您可以使用调试功能执行此操作,尽管这是一个非常脆弱的解决方案,并且非常依赖于您的环境。

启用扩展调试(有关详细信息,请参阅手册):

shopt -s extdebug

创建一个helprun函数:

helprun() {
    if [ $# -eq 2 -a "$2" = "--help" ]; then
        $* | less -F
        return 1
    fi
}

然后用它捕获所有命令:

trap "helprun \$BASH_COMMAND" DEBUG

这将为每个命令运行helprun <command>,如果它是--help命令,则通过less进行管道传输,返回1以便命令不执行(感谢extdebug)。如果不是,它只是正常运行。

我可能在这里没有处理边缘情况......

作者:,Stephen Kitt

相关问答

添加新评论