![如何执行历史记录中的命令而不在终端中再次打印它?](https://linux22.com/image/935421/%E5%A6%82%E4%BD%95%E6%89%A7%E8%A1%8C%E5%8E%86%E5%8F%B2%E8%AE%B0%E5%BD%95%E4%B8%AD%E7%9A%84%E5%91%BD%E4%BB%A4%E8%80%8C%E4%B8%8D%E5%9C%A8%E7%BB%88%E7%AB%AF%E4%B8%AD%E5%86%8D%E6%AC%A1%E6%89%93%E5%8D%B0%E5%AE%83%EF%BC%9F.png)
$ 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
来执行该功能。
这将把最后一个命令字符串读入一个数组,并在符号处进行拆分;
,然后数组中的每个元素(每个命令)单独运行。
为了使其工作,;
是一个保留字符,在任何情况下都不能用于打印字符串等。
对于该解决方案,您必须接受这个限制,但我认为它“足够好”可以发挥作用。