<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 zshuż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 bashmoż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 8Lub możesz readlinerozwinąć --help|grepklawisz po naciśnięciu klawisza lub sekwencji klawiszy. Aby to dotyczyło bashtylko (a nie innych aplikacji takich jak gdbreadline), możesz użyć bindwbudowanej komendy bash, która jest bashinterfejsem 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 rclub eswykorzystujące readline, i gdzie wykonanie tego powiązania może mieć sens, ale AFAICT, nie ustawiają rl_readline_namezmiennej przed wywołaniem, readlinewięc nie będzie można dodawać $ifdla nich instrukcji (będą otherwyglą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 ~/.bashrcto 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 -llub -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.
lessdo 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 bashfunkcji jest podobna do funkcji qhw 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, naby przewinąć do przodu do następnego wiersza zawierającego wyszukiwane hasło, nponownie 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 Arrowklucze do ogólnej nawigacji. Naciśnij qlub, Qaby wyjść lessi 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"
)