Мені здається, що я <command> --help | grep <feature>
дуже часто буваю щодня. Мені було цікаво, чи можна зробити щось подібне, ^^
яке розширюється, "--help | grep"
і тоді я роблю це:
ls ^^ size
Це може виконати наступне:
ls --help | grep size
Мені здається, що я <command> --help | grep <feature>
дуже часто буваю щодня. Мені було цікаво, чи можна зробити щось подібне, ^^
яке розширюється, "--help | grep"
і тоді я роблю це:
ls ^^ size
Це може виконати наступне:
ls --help | grep size
Відповіді:
З 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 вбудовану, яка є bash
API для налаштування readline
, наприклад у вашому ~/.bashrc
:
bind '"^^": "--help|grep "'
Або додати до ~/.inputrc
файлу (файл конфігурації readline):
$if Bash
"^^": "--help|grep "
$endif
(Є й інші оболонки , як rc
або es
що використання Readline і де роблять , що зв'язування може мати сенс , але AFAICT, вони не встановлюють rl_readline_name
змінне перед викликом , readline
так що ви не зможете додати деякі $if
заяви для них (вони будуть показувати , як , other
як всі програми які використовують readline, не вказуючи назву своєї програми)).
Зауважте, що другий потрібно ввести ^
через півсекунди (за замовчуванням) після першого, щоб відбулася заміна.
Для цього можна використовувати функцію bash:
Помістіть у своєму ~ / .bashrc:
qh() {
type -all "$1" ; { man "$1" || "$1" --help ;} | egrep -i -- "$2"
}
Коли ви зберігаєте свою bashrc
роботу, source ~/.bashrc
ви можете:
$ qh ls 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
qh () { type -all "$1" ; { "$1" --help || man "$1" ;} | egrep -i -- "$2" ;}
# значить, ви могли б: qh ls size, qh ls "щось | інше" тощо. (Опціональний) type -all "$1"
також додайте інформацію про $ 1: він говорить, якщо ви будете запускати псевдонім, функцію, a команда тощо. І вона видає інформацію від людини "$ 1", якщо в команді $ 1 не було опції "--help" (таке трапляється іноді)
-a
, але нічого не говорить про -l
або -all
, але функція працює.
Ви можете використовувати прив'язки для читання рядків:
додати рядок типу
"^^": "--help | grep "
до вашого ~ / .inputrc
Потім натисніть ^ X ^ R у своєму терміні, і прив'язка активується.
ls ^^
Тепер клавіша призведе до ls --help | grep
.
less
для перегляду довідкового повідомленняВам може бути корисно побачити навколишній контекст рядків, які відповідають вашому пошуковому запиту.
hh () { "${1}" --help | less -p "${2}" ; }
Синтаксис виклику цієї bash
функції аналогічний функції qh
у відповіді @ tgwtdt, причому перший аргумент - це команда для вивчення, а другий аргумент - пошуковий термін. Наприклад:
hh ls size
hh ls "symbolic link"
Це відкриває повне повідомлення довідки less
, висвітлює кожен екземпляр пошукового терміна та прокручує до першого примірника пошукової терміну. Потім ви можете натиснути, n
щоб прокрутити вперед до наступного рядка, що містить пошуковий термін, n
знову ж таки для наступного тощо. Щоб повернутися до попереднього екземпляра, натисніть N
. Використовуйте Home
, End
, Page Up
, Page Down
, Up Arrow
і Down Arrow
ключі для загальної навігації. Натисніть q
або Q
для виходу less
та повернення до командного рядка.
Мені сподобалося рішення від @tgwtdt, тому я його трохи покращив.
Це робить те ж саме, але трохи справляється з помилками, а також намагається обробляти вбудовані модулі.
qh використовує () замість {}, тому qh1 () і out є локальними (в нижній частині).
function qh () (
function qh1 () {
out="$(help "$1" 2>&1 )"
[ $? -ne 0 ] && return 1
echo "$out"
}
type -all "$1" ; { qh1 "$1" || "$1" --help 2>/dev/null || man "$1" 2>/dev/null ;} | egrep -i -- "$2"
)