我可以用吗 '!!' 在别名或脚本中?

Lud*_*son 11 command-line bash alias

在终端中,我可以使用!!它将引用我之前的命令。
是否可以在别名中使用它?我已经试过了,但实际情况是双感叹号是按字面解释的。

我想要的是:

  1. 我输入一些命令
  2. 我输入了一个别名,其中包含在步骤 1 中输入的内容

如果有使用脚本的解决方案也是可以接受的。

Ser*_*nyy 11

列出最后执行的命令的命令是fc -nl -1. 使用输出替换,我们可以为相同的内容添加更多的参数

$> ls /etc/passwd
/etc/passwd
$> $(fc -nl -1)  /etc/group                                                     
/etc/group  /etc/passwd
$> 
Run Code Online (Sandbox Code Playgroud)

然而,引用可能是这种方法的一个问题

的一个非常好的功能fc是,如果您单独运行fc命令,它将打开在FCEDIT变量中指定的文本编辑器(您可能希望存储在 中~/.bashrc)并且该行的内容将是您的最后一个命令。为了您的方便,我建议您将其nano用作文本编辑器,但如果您知道vim - 甚至更好。

例如,如果我需要编辑qdbus org.ayatana.bamf /org/ayatana/bamf/matcher org.ayatana.bamf.matcher.ActiveWindowHuge 行,对吗?但是有了fc,我可以打开vim和编辑/org/ayatana/bamf/matcher,保存,退出,它就会运行。


Rin*_*ind 9

你不能用!!但是...

手册

与 fc 命令一起使用的一个有用的别名是r='fc -s',以便键入“r cc”运行以 cc 开头的最后一个命令,键入“r”重新执行最后一个命令。


hee*_*ayl 8

如果您坚持使用!!历史扩展语法而不是fc(已经提到),那么有一种方法。

默认情况下,history对于非交互式 shell 会话(例如在脚本中)禁用扩展。

要在脚本中启用历史扩展,请先启用相关的 shell 选项:

set -o history 
set -o histexpand
Run Code Online (Sandbox Code Playgroud)

set -o histexpand也可以写成set -H

现在历史扩展操作例如!!将在脚本中工作。