Com zsh
, você usaria um alias global :
$ alias -g '^^=--help|grep --color -i'
$ ls ^^ size
--block-size=SIZE scale sizes by SIZE before printing them; e.g.,
'--block-size=M' prints sizes in units of
1,048,576 bytes; see SIZE format below
-h, --human-readable with -l and/or -s, print human readable sizes
-s, --size print the allocated size of each file, in blocks
-S sort by file size, largest first
--sort=WORD sort by WORD instead of name: none (-U), size (-S),
-T, --tabsize=COLS assume tab stops at each COLS instead of 8
The SIZE argument is an integer and optional unit (example: 10K is 10*1024)
Com bash
, você poderá usar a expansão do histórico, que ocorre com bastante antecedência na análise de sintaxe do shell, para que possa funcionar na substituição de um canal:
Prepare a história com o texto que você deseja substituir e um caractere especial que você provavelmente não utilizará (como £
aqui, no meu teclado):
$ --help $(: £)|grep
bash: --help: command not found
Usage: grep [OPTION]... PATTERN [FILE]...
Try 'grep --help' for more information.
Em seguida, use a expansão do histórico para recuperar isso:
$ ls !?£? size
ls --help $(: £)|grep size
--block-size=SIZE scale sizes by SIZE before printing them; e.g.,
'--block-size=M' prints sizes in units of
-h, --human-readable with -l and/or -s, print human readable sizes
-s, --size print the allocated size of each file, in blocks
-S sort by file size, largest first
--sort=WORD sort by WORD instead of name: none (-U), size (-S),
-T, --tabsize=COLS assume tab stops at each COLS instead of 8
Ou você pode readline
expandir --help|grep
com alguma tecla ou sequência de teclas pressionada. Para que isso se aplique bash
apenas (e não a outros aplicativos, como o gdb
uso de readline), você pode usar o bind
comando bash builtin, que é bash
a API da configuração readline
, por exemplo ~/.bashrc
:
bind '"^^": "--help|grep "'
Ou adicione ao seu ~/.inputrc
(arquivo de configuração da readline):
$if Bash
"^^": "--help|grep "
$endif
(existem outros shells como rc
ou es
que usam readline e onde fazer essa ligação pode fazer sentido, mas AFAICT, eles não definem a rl_readline_name
variável antes da chamada, readline
para que você não possa adicionar algumas $if
instruções para eles (eles seriam exibidos other
como todos os aplicativos que usam o readline sem informar o nome do aplicativo)).
Observe que você precisa inserir o segundo ^
dentro de meio segundo (por padrão) após o primeiro para que a substituição ocorra.
qh () { type -all "$1" ; { "$1" --help || man "$1" ;} | egrep -i -- "$2" ;}
# daí você pode: qh ls size, qh ls "something | another" etc. o (opcional)type -all "$1"
também adiciona as informações sobre $ 1: diz se você estará lançando um alias, uma função, um de comando, etc. e dá fora informação do homem "$ 1" se o comando $ 1 não tem o "help" opção (isso acontece às vezes)