如何执行历史记录中的命令而不在终端中再次打印它?

如何执行历史记录中的命令而不在终端中再次打印它?
$ echo hello; cd ~/Docs    
hello

$ !! 
echo hello; cd ~/Docs
hello

我想hello在输入后获取并执行更改目录,!!而无需再次重新显示echo hello; cd ~/Docs

编辑:

fc 仅适用于一个命令,但不会从终端执行整行。对于!!或 也一样$(!!),它们不起作用。我试过了stty -echo,但结果一样——它只隐藏了输入!!,但仍显示命令。我最接近的解决方案是存储该命令,然后从 运行它script.sh,但它仍会显示它正在运行script.sh

答案1

创建使用您的 bash 配置加载的以下函数(例如.bashrc):

rpt() {
  IFS=';' read -r -a array <<< "$(fc -ln -1)"
  for element in "${array[@]}"
  do
    $element
  done
}

运行命令rpt来执行该功能。

这将把最后一个命令字符串读入一个数组,并在符号处进行拆分;,然后数组中的每个元素(每个命令)单独运行。

为了使其工作,;是一个保留字符,在任何情况下都不能用于打印字符串等。

对于该解决方案,您必须接受这个限制,但我认为它“足够好”可以发挥作用。

相关内容