!!: 找不到命令

!!: 找不到命令

最近,我对不以管理员身份运行命令感到有点沮丧,并开始使用sudo !!很多。我决定,为了便于使用,我将ffs为该行创建一个别名。我添加了以下行...

alias ffs="sudo !!"

给我的.zshrc

但是,当我尝试使用它时,输入ffs终端会出现错误:

sudo: !!: command not found

为什么使用别名调用该命令时不起作用?可以用什么来解决这个问题/而不是重新运行上一个命令?提前致谢!

答案1

别名扩展时不执行历史扩展。

在这里,要评估与上一个命令中相同的代码,但要在sudo其前面添加任何内容,以及您作为参数传递给附加的别名的任何内容(请记住,它可能不会执行您想要的操作,例如cmd1; cmd2or for i (a b) echo $i),您可以做:

alias ffs='eval "sudo ${history[@]:0:1}"'

或者你可以让它运行sudo zsh -c <the-code-from-the-previous-command+your-args-appended>,但话又说回来,它不适用于类似的事情echo $non_exported_variable

ffs() sudo zsh -c "${history[@]:0:1} ${(j[ ])@}"

特殊关联数组$history将历史事件编号映射到相应的命令行。它的特殊之处还在于它从最新扩展到最旧,因此上面我们可以通过使用 ksh93 样式获取其值列表中的条目中的第一个来获取最新事件,${array[@]:offset:length}尽管您也可以使用${${history[@]}[1]}.

或者,您也可以使用$(fc -nl -1)这意味着分叉一个额外的进程。

相关内容