我正在尝试在 my 中编写一个 bash 函数.bashrc
,该函数会重新运行历史记录中的上一个命令,并对捕获的输出执行一些有用的操作。
my_function() {
output=$(!!)
# Do something with output
}
我正进入(状态:bash: !!: command not found
。我知道命令和 shell 内置命令之间存在差异,但无法弄清楚如何从函数或其等效命令(如果存在)运行此内置命令。如何从 bash 函数中重新运行之前的 shell 命令?
答案1
你不能那样做。就像别名扩展一样,命令历史扩展是在定义函数时执行的,而不是在使用函数时执行的。
不过,您可以使用内置函数直接访问历史记录fc
:
$ redo(){ cmd=$(fc -nl -1 -1); echo "redoing '$cmd'"; eval "$cmd"; }
$ pwd
$ refo
redoing ' pwd'
/home2/ahq