我可以在别名或脚本中使用‘!!’吗?

我可以在别名或脚本中使用‘!!’吗?

在终端中,我可以使用!!它将引用我之前的命令。
是否可以在别名中使用它?我试过了,但结果却是双感叹号被按字面意思解释。

我希望能够实现的是:

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

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

答案1

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

$> ls /etc/passwd
/etc/passwd
$> $(fc -nl -1)  /etc/group                                                     
/etc/group  /etc/passwd
$> 

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

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

例如,如果我需要编辑qdbus org.ayatana.bamf /org/ayatana/bamf/matcher org.ayatana.bamf.matcher.ActiveWindow很长的一行,该怎么办?但是使用fc,我可以打开vim并编辑/org/ayatana/bamf/matcher,保存,退出,然后它就会运行。

答案2

您不能使用!!但是...

来自手动的

与 fc 命令一起使用的有用别名是r='fc -s',因此输入“r cc”将运行最后一个以 cc 开头的命令输入‘r’重新执行上一个命令。

答案3

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

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

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

set -o history 
set -o histexpand

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

现在历史扩展操作例如!!可以在脚本内部运行。

相关内容