我发现自己<command> --help | grep <feature>
每天都很经常做。我想知道是否有可能使类似的东西^^
扩展到"--help | grep"
然后再执行以下操作:
ls ^^ size
这将执行以下操作:
ls --help | grep size
我发现自己<command> --help | grep <feature>
每天都很经常做。我想知道是否有可能使类似的东西^^
扩展到"--help | grep"
然后再执行以下操作:
ls ^^ size
这将执行以下操作:
ls --help | grep size
Answers:
使用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的外壳程序,并且可以在其中进行绑定但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“ something | another”等。(可选)type -all "$1"
还添加有关$ 1的信息:它表示是否要启动别名,函数,命令,等等。如果命令$ 1没有选项“ --help”(有时会发生),它会从man“ $ 1”发出信息
-a
,但没有说关于-l
或-all
,但是该函数确实起作用。
您可以使用readline绑定:
添加一行
"^^": "--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是本地的(在子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"
)