![为什么不打!!非交互式工作?](https://linux22.com/image/100205/%E4%B8%BA%E4%BB%80%E4%B9%88%E4%B8%8D%E6%89%93%EF%BC%81%EF%BC%81%E9%9D%9E%E4%BA%A4%E4%BA%92%E5%BC%8F%E5%B7%A5%E4%BD%9C%EF%BC%9F%20.png)
如果我在 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 不执行历史记录扩展。