使用 !!从 bash 函数内部

使用 !!从 bash 函数内部

我正在尝试在 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

相关内容