С помощью zshвы бы использовали глобальный псевдоним:
$ 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)
С помощью bashэтого вы можете использовать расширение истории, которое происходит достаточно рано при синтаксическом разборе оболочки и может работать при замене канала:
Заполните историю текстом, который вы хотите заменить, и специальным символом, который вы вряд ли будете использовать в противном случае (например, £здесь, на моей клавиатуре):
$ --help $(: £)|grep
bash: --help: command not found
Usage: grep [OPTION]... PATTERN [FILE]...
Try 'grep --help' for more information.
Затем используя расширение истории, чтобы получить это:
$ 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
Или вы могли бы readlineрасширить --help|grepнекоторые клавиши или последовательности клавиш. Чтобы это применимо bashтолько к (а не к другим приложениям, таким как gdbиспользование readline), вы можете использовать bindвстроенную команду bash, которая является bashAPI для настройки readline, например, в вашем ~/.bashrc:
bind '"^^": "--help|grep "'
Или добавьте в свой ~/.inputrc(файл конфигурации readline):
$if Bash
"^^": "--help|grep "
$endif
(существуют другие оболочки, подобные rcили esиспользующие readline, и где такое связывание может иметь смысл, но AFAICT не устанавливает rl_readline_nameпеременную перед вызовом, readlineпоэтому вы не сможете добавить некоторые $ifоператоры для них (они будут отображаться как otherвсе приложения которые используют readline, не называя это своим именем приложения)).
Обратите внимание, что вам нужно ввести второй ^в течение полсекунды (по умолчанию) после первого, чтобы произошла замена.
qh () { type -all "$1" ; { "$1" --help || man "$1" ;} | egrep -i -- "$2" ;}#, следовательно, вы могли бы: qh ls size, qh ls «что-то | другое» и т. Д. (Optionnal)type -all "$1"также добавить информацию о $ 1: в ней говорится, что вы будете запускать псевдоним, функцию, a команда и т. д. И она выдает информацию от man «$ 1», если команда $ 1 не имеет опции «--help» (это иногда случается)