Мені здається, що я <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), ви можете використовувати команду bindbash вбудовану, яка є bashAPI для налаштування 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"
)