我怎么能别名!!


50

我正在尝试sudo !!在Bash中设置别名。我尝试过alias sbb='sudo !!',但是它将其解释为文字 !!并打印

sudo: !!: command not found

如果我使用双引号,它将代替字符串本身中的双引号,因此不起作用。

有什么办法可以使这项工作吗?还是其他别名?`



Answers:


61

!!键入时,将由bash扩展。它不会通过别名替换来扩展。

您可以使用history内置功能进行扩展:

alias sbb='sudo $(history -p !!)'

如果该命令不仅仅是一个简单的命令(例如,它包含重定向或管道),则需要在sudo下调用shell:

alias sbb='sudo "$BASH" -c "$(history -p !!)"'

有一个tcsh吗?
mdpc

1
@mdpc:我不使用tcsh,但是我瞥了一眼,man tcsh发现它确实在别名扩展过程进行了历史扩展,“就像原始命令是前一个输入行一样。” 有趣。但是,它alias sbb 'sudo \!-2没有按预期工作(它实际上替代了第二个以前的条目);alias sbb 'sudo \!\!'确实按预期工作(替换sbb!!);最终结果证明我想要的是alias sbb 'sudo \!-1'和我期望的一样的东西\!\!。(tcsh 6.17.06(Astron)2011-04-15)YMMV。祝好运。
rici

谢谢!当以管理员身份忘记将sudo放在命令前面时,此别名非常有用。
mdpc

而不是sbb我希望使用prease@jpschorr建议的别名
rubo77 '16

40

尝试:

alias sbb='sudo $(fc -ln -1)'

我喜欢实际上更喜欢将其命名为“ please”:

alias please='sudo $(fc -ln -1)'

信息:fc是bash shell中的内置命令。列出,编辑和重新执行以前输入到交互式外壳程序中的命令。


13
please绝对是要走的路!
Anto

也适用于bash,因此删除了“ for zsh”注释。
Michael Durrant 2015年

1
在zsh中效果很好。fc是要使用的命令。谢谢
Frax

please让我觉得终端是一个实体,我必须很好地完成工作。我更喜欢控制感更好的东西fuck;)
Przemek D


0

这最初是在问题上发布的,但后来建议在此处发布。

这是使用别名的别名fchistory使用别名的方法!-。假设您要使用!-n(其中n是最后使用的 n 命令的数字),则可以使用fchistory使用别名,如下所示:

  1. 使用history

    alias xyz='echo $(history -p "!-<n>") ; sudo $(history -p "!-n")'

    注意:此处!-n应使用'或括起来''

  2. 使用fc

    alias xyz='echo $(fc -ln -n -n) ; sudo $(fc -ln -n -n)'

    注:此处1 和2 -n用于指定历史记录列表的范围。

在这里,我在执行命令之类的命令之前使用过回声!-<n>


先前的答案已经涵盖history -pfc。这里有什么新鲜事吗?
大师

好的,那是什么?
muru

我发现这-ln -n -n非常令人困惑;还有关于'''(还有关于-<n>)。
斯科特

选项2。我想您一定是错字$(fc -ln -1)
cmcginty

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.