最近,我对不以管理员身份运行命令感到有点沮丧,并开始使用sudo !!
很多。我决定,为了便于使用,我将ffs
为该行创建一个别名。我添加了以下行...
alias ffs="sudo !!"
给我的.zshrc
。
但是,当我尝试使用它时,输入ffs
终端会出现错误:
sudo: !!: command not found
为什么使用别名调用该命令时不起作用?可以用什么来解决这个问题/而不是重新运行上一个命令?提前致谢!
答案1
别名扩展时不执行历史扩展。
在这里,要评估与上一个命令中相同的代码,但要在sudo
其前面添加任何内容,以及您作为参数传递给附加的别名的任何内容(请记住,它可能不会执行您想要的操作,例如cmd1; cmd2
or 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)
这意味着分叉一个额外的进程。