刚才,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
Run Code Online (Sandbox Code Playgroud)
或者
# Alias --help ; ignore rest of the line
alias -g -- --help="--help | less -FX ; true "
Run Code Online (Sandbox Code Playgroud)
另外,在研究这个问题时,我浪费的时间可能比这节省的时间还要多。一点也不后悔。
在 中bash,您可以使用调试功能执行此操作,尽管这是一个非常脆弱的解决方案,并且非常依赖于您的环境。
启用扩展调试(详见手册):
shopt -s extdebug
Run Code Online (Sandbox Code Playgroud)
创建一个帮助运行函数:
helprun() {
if [ $# -eq 2 -a "$2" = "--help" ]; then
$* | less -F
return 1
fi
}
Run Code Online (Sandbox Code Playgroud)
然后用它捕获所有命令:
trap "helprun \$BASH_COMMAND" DEBUG
Run Code Online (Sandbox Code Playgroud)
这将为helprun <command>每个命令运行,如果它是一个--help命令,则将其通过管道less传输,返回 1 以便该命令不执行(感谢extdebug)。如果不是,它只是正常运行。
可能有一些我没有在这里处理过的边缘情况......
| 归档时间: |
|
| 查看次数: |
606 次 |
| 最近记录: |