这个特殊的别名命令有什么作用?
alias hello='sudo $(history -p \!\!)'
我想了解历史和-p做什么!
答案 0 :(得分:3)
Bash会跟踪您运行的命令。这称为命令历史记录。 history
命令允许您访问和操作命令历史记录。
-p
标志告诉history
命令对其参数执行历史记录替换并在标准输出上打印结果。执行历史记录替换时,history
会将!!
替换为上一个命令。在您的情况下,每个!
都会被转义为\!
,大概是因为bash允许您将!
设置为非常神奇,而此别名的作者想要抑制额外的魔法。< / p>
当bash看到$(...)
时,它会执行命令替换。这意味着它在括号之间运行命令,并用命令的标准输出替换$(...)
,
sudo
命令以root身份运行其参数。
因此,此别名允许您键入hello
以root身份运行上一个命令。如果上一个命令引用了空格(我认为),你会遇到麻烦,但通常它应该有效。
使用fc
,你可以通过(在我看来)获得同样的效果:
alias hello='sudo $(fc -ln -1)'
fc
命令还执行历史记录访问和操作。 -l
标志表示“打印一些历史记录条目”。 -n
标志表示不打印历史条目号(只打印命令)。 -1
(否定的)意味着只打印最近的历史记录条目。