Lud*_*son 11 command-line bash alias
在终端中,我可以使用!!
它将引用我之前的命令。
是否可以在别名中使用它?我已经试过了,但实际情况是双感叹号是按字面解释的。
我想要的是:
如果有使用脚本的解决方案也是可以接受的。
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.ActiveWindow
Huge 行,对吗?但是有了fc
,我可以打开vim
和编辑/org/ayatana/bamf/matcher
,保存,退出,它就会运行。
如果您坚持使用!!
历史扩展语法而不是fc
(已经提到),那么有一种方法。
默认情况下,history
对于非交互式 shell 会话(例如在脚本中)禁用扩展。
要在脚本中启用历史扩展,请先启用相关的 shell 选项:
set -o history
set -o histexpand
Run Code Online (Sandbox Code Playgroud)
set -o histexpand
也可以写成set -H
。
现在历史扩展操作例如!!
将在脚本中工作。