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ê pode usar expansão de histórico , o que acontece cedo o suficiente na análise de sintaxe do shell e pode funcionar substituindo um pipe:
-
Prepare o histórico com o texto que você deseja substituir e um caractere especial que você provavelmente não usaria (como £
aqui que está no meu teclado):
$ --help $(: £)|grep
bash: --help: command not found
Usage: grep [OPTION]... PATTERN [FILE]...
Try 'grep --help' for more information.
-
Em seguida, usando 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 ter readline
expand --help|grep
em alguma tecla ou sequência de teclas. Para que isso se aplique apenas a bash
(e não a outros aplicativos como gdb
usando readline), é possível usar o comando bind
bash builtin que é a API bash
para configurar readline
, por exemplo, em seu ~/.bashrc
:
bind '"^^": "--help|grep "'
Ou adicione ao seu ~/.inputrc
(arquivo de configuração da linha de leitura):
$if Bash
"^^": "--help|grep "
$endif
(há 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 variável rl_readline_name
antes de invocar readline
para que você não seja capaz de adicionar alguns $if
declarações para eles (eles seriam mostrados como other
como todos os aplicativos que usam readline sem dizer seu nome de aplicativo)).
Note que você precisa inserir o segundo ^
dentro de meio segundo (por padrão) após o primeiro para a substituição ocorrer.