历史和egrep在一个脚本中

时间:2015-07-10 03:03:51

标签: bash shell ssh grep

我必须输入:

history | egrep ssh

每次我想搜索我最新的ssh连接。

然后我得到了一个想法,如何将它们放在一个脚本中。我称之为histgrep.sh

#!/bin/bash
history | /bin/egrep "$1"

但是,每当我致电histgrep.sh ssh时,它都不会产生任何结果。

任何人都可以帮我解决这个问题吗?或者您有替代解决方案吗?

3 个答案:

答案 0 :(得分:1)

转回来回答自动转换为评论的(普通)答案:)

默认情况下,历史记录在非交互式bash shell中禁用,但可以重新启用,请参阅此问答:https://unix.stackexchange.com/questions/5684/history-command-inside-bash-script

是的,使用脚本本身的!<num>不起作用,但是在调用脚本的shell中(问题中明显的预期用法上下文)它可以正常工作:

> cat histgrep.sh 
#!/bin/bash
HISTFILE=~/.bash_history
set -o history
history | egrep "$1"
> ./histgrep.sh 'ls -la'
...
  460  ls -la *
> !460
ls -la *
-rw-rw-r--. 1 userid at    24167 Nov 21  2012 cfu
-rwxrwxr-x  1 userid at       73 Jul 10 00:23 histgrep.sh
-rwxrwxr-x. 1 userid users  2025 Apr  2  2013 same_file.py
-rwxrwxr-x  1 userid at      385 Jun 25 13:01 tst.py
-rwxrwxr-x  1 userid at      310 Jul  9 23:58 tst.sh

答案 1 :(得分:1)

history命令适用于当前shell的上下文,因此从脚本调用它不会(平凡地)工作。 shell函数可以访问当前shell的上下文,因此将这样的内容添加到.bashrc或类似内容中就可以实现所需。

histgrep () { history | egrep "$@"; }

别名在技术上也可以工作,但通常没有充分理由在函数上使用别名。

答案 2 :(得分:0)

简单的解决方案,使用bash别名。

在终端上,键入:

alias histgrep="history | grep"

使用方法:

histgrep ssh

以上命令等于history | grep ssh

参考:

An Introduction to bash aliases and functions