“sudo !!” 在 bash 中如何工作

“sudo !!” 在 bash 中如何工作

“sudo !!” 在 bash 中的工作原理:

$ touch /bin/1
touch: cannot touch `/bin/1': Permission denied
$ sudo !!
sudo touch /bin/1

答案1

bash 支持历史扩展功能。历史扩展由 '!' 实现。'!!' 引用前一个命令。

在读取命令行之后、execve() 系统调用之前立即执行历史扩展。

$ touch /bin/1
touch: невозможно выполнить touch для «/bin/1»: Отказано в доступе
$ sudo strace !!                
sudo strace touch /bin/1
execve("/usr/bin/touch", ["touch", "/bin/1"], [/* 17 vars */]) = 0

bash 将“sudo !!”扩展为“sudo touch /bin/1”,然后运行命令。

答案2

sudo !!只是告诉终端运行上一个命令,但这次是在 sudo 下。在这种情况下,它与sudo touch /bin/1第一次输入相同。

相关内容