我可以用吗 ‘!!’ 在别名或脚本中?
在终端我可以使用!!
这将引用我以前的命令。
是否可以在别名中使用它? 我已经尝试过了,但是会发生双重感叹号的字面解释。
我想要的是:
- 我输入一些命令
- 我键入了一个别名,其中包含在步骤1中输入的内容
如果有使用脚本的解决方案也是可以接受的。
列出上次执行的命令的命令是fc -nl -1
。 使用输出替换,我们可以向同一内容添加更多参数
$> ls /etc/passwd /etc/passwd $> $(fc -nl -1) /etc/group /etc/group /etc/passwd $>
然而,引用可能是这种方法的问题
fc
一个非常好的function是,如果你只是自己运行fc
命令,它将打开FCEDIT
变量中指定的文本编辑器(你可能想要存储在~/.bashrc
),并且该行的内容将是你的最后一个命令。 为了您的方便,我建议您使用nano
作为文本编辑器,但如果您知道vim
– 甚至更好。
例如,如果我需要编辑qdbus org.ayatana.bamf /org/ayatana/bamf/matcher org.ayatana.bamf.matcher.ActiveWindow
怎么办? 但是使用fc
,我可以打开vim
并编辑/org/ayatana/bamf/matcher
,保存,退出并运行。
你不能用!!
但……
从手册 :
与fc命令一起使用的有用别名是
r='fc -s'
,因此输入’r cc’运行以cc开头的最后一个命令并输入’r’重新执行最后一个命令。
如果你坚持使用!!
历史扩展语法而不是fc
(已经提到),有一种方法。
默认情况下,对于非交互式shell会话(例如脚本)禁用history
扩展。
要在脚本中启用历史记录扩展,请首先启用相关的shell选项:
set -o history set -o histexpand
set -o histexpand
也可以写成set -H
。
现在的历史扩展操作,例如!!
将在脚本内部工作。