为什么不打!!非交互式工作?

为什么不打!!非交互式工作?

如果我在 shell 中执行此操作,我可以看到!!bash 变量包含最后一个命令。

$> echo foo
foo
$> echo !!
echo echo foo
echo foo

但是这个脚本

#!/bin/bash

mkdir /path/doesnt/exist ||
{
    echo "Could not !!";
    exit 1;
}

输出

mkdir: cannot create directory ‘/path/doesnt/exist’: No such file or directory
Could not !!

我预计输出是Could not mkdir /path/doesnt/exist

为什么这不起作用以及如何修复它?

答案1

因为!!是读取 bash 历史记录的命令,而 bash 历史记录仅在交互模式下使用。

实际上,您不希望每个脚本都会填满您的命令历史记录。

来自 bash 手册,“历史扩展”部分

默认情况下,非交互式 shell 不执行历史记录扩展。

相关内容