![将命令参数转换为历史搜索模式](https://linux22.com/image/177767/%E5%B0%86%E5%91%BD%E4%BB%A4%E5%8F%82%E6%95%B0%E8%BD%AC%E6%8D%A2%E4%B8%BA%E5%8E%86%E5%8F%B2%E6%90%9C%E7%B4%A2%E6%A8%A1%E5%BC%8F.png)
我有一个别名,只需输入 h + 搜索模式即可快速搜索我的终端历史记录。
alias h='history | /usr/bin/grep '
它的工作方式应该如此,但如果不添加更多的 grep 实例,我就无法添加更多的搜索模式。例如h pacman | grep wine
我想调整它以将其他可能的参数转换为搜索模式。例如h pacman wine
Obs.:我知道有现成的解决方案可以实现这一目标,但由于我不知道如何做到这一点,所以我想学习。
答案1
为此,您需要一个 shell 函数而不是 shell 别名:
function h() {
code="cat ~/.bash_history"
for arg in $@ ; do
code="$code | grep $arg"
done
eval "$code"
}
您可以将此函数放在您的.bashrc
别名指令中或您通常编写别名指令的任何位置。
答案2
这里的关键是,对于多个模式grep
,您通常必须使用-e
选项来指定每个模式(因此grep -e pacman -e wine
而不是仅仅grep pacman wine
)。两种选择:
别名不支持参数,因此使用函数:
h () { local args=() # local array to store argument with -e for grep for i do args+=(-e "$i") # tack on the -e for each argument done history | grep "${args[@]}" }
这假设所有参数都是 的模式
grep
。继续使用别名,并添加
-e
您自己的:h -e pacman -e wine
这样,您还可以添加
grep
您想要的任何其他选项(例如,-C 3
显示结果周围的一些上下文)。