在终端中,我可以使用!!
它将引用我之前的命令。
是否可以在别名中使用它?我试过了,但结果却是双感叹号被按字面意思解释。
我希望能够实现的是:
- 我输入一些命令
- 我输入一个别名,其中包含在步骤 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
答案3
如果您坚持使用!!
历史扩展语法而不是fc
(已经提到过),那么有一种方法。
默认情况下,history
非交互式 shell 会话(例如脚本)中的扩展是被禁用的。
要在脚本中启用历史记录扩展,请先启用相关的 shell 选项:
set -o history
set -o histexpand
set -o histexpand
也可以写成set -H
。
现在历史扩展操作例如!!
可以在脚本内部运行。