sudo !!
我正在尝试在 Bash 中设置别名。我尝试过alias sbb='sudo !!
',但它将其解释为文字 !!
并打印
sudo: !!: command not found
如果我使用双引号,它会替换字符串本身中的双感叹号,因此这是行不通的。
有什么办法可以让这个工作吗?或者另一个别名? `
答案1
!!
当您键入它时,它会被 bash 扩展。它不会通过别名替换进行扩展。
您可以使用history
内置进行扩展:
alias sbb='sudo $(history -p !!)'
如果命令不仅仅是一个简单的命令(例如它包含重定向或管道),您需要在 sudo 下调用 shell:
alias sbb='sudo "$BASH" -c "$(history -p !!)"'
答案2
答案3
现在 GitHub 上有一个用于此目的的存储库,它神奇地检查它是否需要超级用户权限,还修复了拼写错误:
答案4
这最初发布于这问题,但后来建议在这里发帖。
以下是如何将fc
andhistory
与别名一起使用来进行!-
类似的替换。假设您想使用!-n
(其中n是最后使用的第 n 个命令的数字),那么您可以将fc
andhistory
与别名一起使用,如下所示:
使用
history
:alias xyz='echo $(history -p "!-<n>") ; sudo $(history -p "!-n")'
注意:这里
!-n
应该用'
或括起来''
。使用
fc
:alias xyz='echo $(fc -ln -n -n) ; sudo $(fc -ln -n -n)'
注意:这里的1st和2nd用于
-n
指定历史列表的范围。
在这里,我在执行命令之前使用了 echo-ing 来感觉像!-<n>
.