如何在 bash 中交互扩展 bang 命令?
How to interactively expand a bang command in bash?
zsh 和 bash 等 Shell 具有 bang 命令,它们以感叹号开头并扩展到用户历史记录中的项目。
要获取最后一个命令的最后一个参数 运行,可以使用 !$
,例如
$ echo one two three
$ echo !$ !$ !$
> three three three
在 zsh 中,可以交互地扩展这些 bang 命令:
touch foo bar
ls !$<TAB>
!$
将扩展为 foo
内联。
这非常有用,因为它经常防止我犯错误:我按 tab
展开并确保我做对了,然后 C-/
在我有信心时撤消展开。
bash中有设置可以实现bang命令的交互扩展吗?
关于子外壳的扩展和一般变量(即 echo $(uname)<TAB>
到 echo Linux
和 echo $SHELL<TAB>
到 echo /bin/bash
)。
有几个选项可用于历史扩展。一种是 :p
修饰符,它打印展开的命令而不是执行它。
$ echo foo
$ !!:p
echo foo
另一种是使用histverify
选项,将历史扩展的结果放在shell缓冲区中进行编辑,而不是立即执行。
$ shopt -s histverify
$ echo foo
foo
$ !!
$ echo foo
如果您对命令感到满意,只需再次按 Enter 键即可执行它,就好像您刚刚输入它一样。
默认情况下,Readline 命令 history-expand-line
绑定到 M-^
(Alt-^
或 Esc-^
,具体取决于您的终端仿真器作为元键发送的内容),它扩展了当前命令行上的任何历史扩展。
还有一个通用的Readline命令shell-expand-line
(默认绑定到M-C-e
),它在命令行上展开everything,就像shell 会在按下 Enter 键后实际执行之前执行。
zsh 和 bash 等 Shell 具有 bang 命令,它们以感叹号开头并扩展到用户历史记录中的项目。
要获取最后一个命令的最后一个参数 运行,可以使用 !$
,例如
$ echo one two three
$ echo !$ !$ !$
> three three three
在 zsh 中,可以交互地扩展这些 bang 命令:
touch foo bar
ls !$<TAB>
!$
将扩展为 foo
内联。
这非常有用,因为它经常防止我犯错误:我按 tab
展开并确保我做对了,然后 C-/
在我有信心时撤消展开。
bash中有设置可以实现bang命令的交互扩展吗?
关于子外壳的扩展和一般变量(即 echo $(uname)<TAB>
到 echo Linux
和 echo $SHELL<TAB>
到 echo /bin/bash
)。
有几个选项可用于历史扩展。一种是 :p
修饰符,它打印展开的命令而不是执行它。
$ echo foo
$ !!:p
echo foo
另一种是使用histverify
选项,将历史扩展的结果放在shell缓冲区中进行编辑,而不是立即执行。
$ shopt -s histverify
$ echo foo
foo
$ !!
$ echo foo
如果您对命令感到满意,只需再次按 Enter 键即可执行它,就好像您刚刚输入它一样。
默认情况下,Readline 命令 history-expand-line
绑定到 M-^
(Alt-^
或 Esc-^
,具体取决于您的终端仿真器作为元键发送的内容),它扩展了当前命令行上的任何历史扩展。
还有一个通用的Readline命令shell-expand-line
(默认绑定到M-C-e
),它在命令行上展开everything,就像shell 会在按下 Enter 键后实际执行之前执行。