2014-09-05 93 views
0

这个特定的别名命令做什么?了解bashrc别名命令

alias hello='sudo $(history -p \!\!)' 

我想了解历史和-p做了什么!

+1

http://www.gnu.org/software/bash/manual/bashref.html#Using-History-Interactively – jm666 2014-09-05 23:32:10

+0

你的问题不是关于别名。是关于一个命令。历史命令输出存储在var中。是我能告诉你的,但最简单的是搜索历史命令 – wonderwhy 2014-09-05 23:38:21

回答

3

Bash会记录您运行的命令。这称为您的命令历史记录。使用history命令可以访问和操作您的命令历史记录。

-p标志告诉history命令在它的参数执行历史替换并打印在标准输出的结果。执行历史替换时,history将用前一个命令替换!!。在你的情况下,每个!都被转义为\!,大概是因为bash可以让你将!设置为超魔法,并且这个别名的作者想要压制额外的魔法。

当bash看到$(...)时,它执行命令替换。这意味着它运行括号之间的命令,并用命令的标准输出替换$(...)

sudo命令以root身份运行其参数。

因此,此别名可让您键入hello以root身份运行您的上一个命令。如果前面的命令引用了空格(我认为),你会遇到麻烦,但通常它应该起作用。

您可以通过使用fc得到相同的效果(在我看来)魔法少一点:

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

fc命令还执行历史访问和操作。 -l标志表示“打印一些历史条目”。 -n标志表示不打印历史记录条目编号(仅打印命令)。 -1(负数)意味着只打印最近的历史记录。