<command> --help | grep <feature>
Codziennie robię to bardzo często. Zastanawiałem się, czy można stworzyć coś takiego ^^
, "--help | grep"
a następnie robię to:
ls ^^ size
Spowoduje to wykonanie następujących czynności:
ls --help | grep size
<command> --help | grep <feature>
Codziennie robię to bardzo często. Zastanawiałem się, czy można stworzyć coś takiego ^^
, "--help | grep"
a następnie robię to:
ls ^^ size
Spowoduje to wykonanie następujących czynności:
ls --help | grep size
Odpowiedzi:
Z zsh
użyłbyś globalnego aliasu:
$ 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)
Dzięki bash
możesz być w stanie użyć rozszerzenia historii, które dzieje się wystarczająco wcześnie w analizie składni powłoki, aby mogło działać przy podstawianiu potoku:
Poddaj historię tekstem, który chcesz zastąpić, i znakiem specjalnym, którego w innym przypadku raczej nie użyjesz (tak jak £
tutaj na mojej klawiaturze):
$ --help $(: £)|grep
bash: --help: command not found
Usage: grep [OPTION]... PATTERN [FILE]...
Try 'grep --help' for more information.
Następnie użyj rozszerzenia historii, aby je odzyskać:
$ 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
Lub możesz readline
rozwinąć --help|grep
klawisz po naciśnięciu klawisza lub sekwencji klawiszy. Aby to dotyczyło bash
tylko (a nie innych aplikacji takich jak gdb
readline), możesz użyć bind
wbudowanej komendy bash, która jest bash
interfejsem API do konfiguracji readline
, na przykład w ~/.bashrc
:
bind '"^^": "--help|grep "'
Lub dodaj do swojego ~/.inputrc
(pliku konfiguracyjnego readline):
$if Bash
"^^": "--help|grep "
$endif
(istnieją inne powłoki, takie jak rc
lub es
wykorzystujące readline, i gdzie wykonanie tego powiązania może mieć sens, ale AFAICT, nie ustawiają rl_readline_name
zmiennej przed wywołaniem, readline
więc nie będzie można dodawać $if
dla nich instrukcji (będą other
wyglądać jak wszystkie aplikacje) które używają readline bez podawania nazwy aplikacji)).
Pamiętaj, że musisz wprowadzić drugi ^
w ciągu pół sekundy (domyślnie) po pierwszym, aby nastąpiła zamiana.
Możesz do tego użyć funkcji bash:
Umieść w swoim ~ / .bashrc:
qh() {
type -all "$1" ; { man "$1" || "$1" --help ;} | egrep -i -- "$2"
}
Po zapisaniu bashrc
zrób source ~/.bashrc
to można zrobić:
$ 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" ;}
Zmieniłbym to na: # stąd możesz: qh ls size, qh ls "coś | innego" itd. (Optionnal) type -all "$1"
również dodaje informacje o 1 $: mówi, czy będziesz uruchamiał alias, funkcję, a polecenie itp. I przekazuje informacje od człowieka „$ 1”, jeśli polecenie $ 1 nie ma opcji „--help” (zdarza się to czasami)
-a
, ale nic nie mówi o -l
lub -all
, ale funkcja działa.
Możesz użyć powiązań readline:
dodaj linię jak
"^^": "--help | grep "
do twojego ~ / .inputrc
Następnie naciśnij ^ X ^ R w swoim terminie, a wiązanie zostanie aktywowane.
Kluczowanie ls ^^
spowoduje teraz ls --help | grep
.
less
do przeglądania komunikatu pomocyPrzydatne może być sprawdzenie otaczającego kontekstu wierszy pasujących do zapytania.
hh () { "${1}" --help | less -p "${2}" ; }
Składnia wywołania tej bash
funkcji jest podobna do funkcji qh
w odpowiedzi @ tgwtdt, przy czym pierwszym argumentem jest polecenie do sprawdzenia, a drugim argumentem jest wyszukiwane hasło. Na przykład:
hh ls size
hh ls "symbolic link"
Spowoduje to otwarcie komunikatu pełnej pomocy less
, wyróżnienie każdego wystąpienia wyszukiwanego terminu i przewinięcie do pierwszego wystąpienia wyszukiwanego terminu. Następnie możesz nacisnąć przycisk, n
aby przewinąć do przodu do następnego wiersza zawierającego wyszukiwane hasło, n
ponownie dla następnego i tak dalej. Aby przewinąć z powrotem do poprzedniego wystąpienia, naciśnij N
. Użyj Home
, End
, Page Up
, Page Down
, Up Arrow
, a Down Arrow
klucze do ogólnej nawigacji. Naciśnij q
lub, Q
aby wyjść less
i powrócić do wiersza poleceń.
Podobało mi się rozwiązanie @tgwtdt, więc trochę go ulepszyłem.
Robi to samo, ale trochę zajmuje się błędami, a także próbuje przetwarzać wbudowane.
qh używa () zamiast {}, więc qh1 () i out są lokalne (w podpowłoce).
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"
)