我发现自己<command> --help | grep <feature>
每天都做很多很多事情。我想知道是否可以将类似的东西^^
扩展到"--help | grep"
然后我这样做:
ls ^^ size
这将执行以下内容:
ls --help | grep size
答案1
您可以使用 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
答案2
对于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
,您也许可以使用历史扩展这是在 shell 语法解析中发生得足够早的一个,它可以用来替换管道:
用您想要替换的文本和您不太可能使用的特殊字符来填充历史记录(就像
£
这里恰好在我的键盘上一样):$ --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 的 shell,并且在哪里执行该绑定可能有意义,但据我所知,它们rl_readline_name
在调用之前不会设置变量readline
,因此您将无法$if
为它们添加一些语句(它们将other
像所有应用程序一样显示)使用 readline 而不告诉它它们的应用程序名称))。
请注意,您需要^
在第一个输入后的半秒内(默认情况下)输入第二个,以便进行替换。
答案3
您可以使用 readline 绑定:
添加一行像
"^^": "--help | grep "
到你的~/.inputrc
然后按您的术语中的 ^X ^R,绑定将被激活。
键入ls ^^
现在将导致ls --help | grep
.
答案4
我喜欢@tgwtdt 的解决方案,所以我对其进行了一些增强。
这做了同样的事情,但做了一些处理错误的工作,并且还尝试处理内置函数。
qh 使用 () 而不是 {},因此 qh1() 和 out 是本地的(在子 shell 中)。
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"
)