Como fazer com que o texto de ajuda do programa canalize automaticamente menos?

5

Só agora, dpkg --help cuspir três páginas de saída na minha cara. Eu talvez estivesse interessado nas primeiras dez linhas, que mostram o uso geral e os argumentos mais comuns.

Eu gostaria disso, sempre que eu executo um programa (qualquer programa) com --help como o único argumento, se a saída for maior que $(tput lines) , ela será automaticamente canalizada através de less . É facilmente realizável em bash?

Editar: No final, a melhor solução para mim foi mudar para o zsh. Qualquer um dos snippets a seguir no seu ~/.zshrc fará o trabalho; cada um tem suas próprias vantagens:

# 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

ou

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

Além disso, ao pesquisar essa questão, provavelmente perdi mais tempo do que isso jamais me salvaria. Não se arrependa nem um pouco.

    
por Mihai 12.02.2015 / 13:35

2 respostas

5

Em bash , você pode fazer isso com os recursos de depuração, embora seja uma solução bastante frágil e muito dependente de seu ambiente.

Habilite a depuração estendida (consulte manual para detalhes ):

shopt -s extdebug

Crie uma função de helprun:

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

Em seguida, intercepte todos os comandos com ele:

trap "helprun \$BASH_COMMAND" DEBUG

Isso executará helprun <command> para cada comando e, se for um comando --help , canalize-o em less , retornando 1 para que o comando não seja executado (graças a extdebug ). Se não for, apenas funciona normalmente.

Provavelmente existem casos extremos que não tenho tratado aqui ...

    
por 12.02.2015 / 15:38
2

O método alternativo é escrever um script que faça o mesmo:

#!/bin/bash
$1 --help | less -F

Chame Help , por exemplo, chmod +x Help para torná-lo um arquivo executável e coloque-o em algum lugar em PATH , como /bin ou /usr/bin . Então, toda vez que você quiser listar a ajuda de um programa, use Help <program> em vez de <program> --help .

    
por 12.02.2015 / 16:00

Tags