我必须输入:
history | egrep ssh
每次我想搜索我最新的ssh连接。
然后我得到了一个想法,如何将它们放在一个脚本中。我称之为histgrep.sh
#!/bin/bash
history | /bin/egrep "$1"
但是,每当我致电histgrep.sh ssh
时,它都不会产生任何结果。
任何人都可以帮我解决这个问题吗?或者您有替代解决方案吗?
答案 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
参考: