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


10

在终端中,我可以使用!!它将引用我先前的命令。
可以在别名中使用它吗?我已经尝试过了,但是发生的是双感叹号是按字面解释的。

我想拥有的是:

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

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


您的主要目标是什么?在上一个命令中添加更多选项?
Sergiy Kolodyazhnyy,2016年

我的目标不是快速键入我经常使用的长命令。它的中间是一个长字符串,通常是前一个命令
路德维希·马格努森

似乎您只需要fc命令,就可以打开文本编辑器,因为这是编辑长命令的最简单方法。让我将其添加到我的帖子中。另外,也许您可​​以提供命令示例?
Sergiy Kolodyazhnyy

在我的帖子中添加了修改
Sergiy Kolodyazhnyy

Answers:


11

列出最后执行的命令的命令是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,保存,退出,它将运行。


9

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

手册

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


因此,这将允许我在上一个命令的开头添加一些内容。那中间呢?
路德维希·马格努森

8

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

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

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

set -o history 
set -o histexpand

set -o histexpand可以写为set -H过。

现在,历史扩展操作例如!!可以在脚本中进行。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.