我知道 bash 功能 !text,它运行以“text”开头的最后一个命令。但是当“text”包含空格时,它似乎不起作用。有时搜索包含空格的内容很有用。
例如:
history | grep ping
514 ping 192.168.100.2
515 ping 192.168.100.3
516 ping 192.168.100.4
517 ping google.com
518 ping 192.168.100.5
519 ping 192.168.100.6
520 ping 192.168.100.7
我想使用 ! 功能调用该行“ping google.com”。我尝试了一些方法,但都失败了:
这是标准行为,它运行最后一个 ping 命令
/root# !ping
ping 192.168.100.7
! 后带空格的简单字符串不起作用
/root# !ping google
ping 192.168.100.7 google
据我所知,引号告诉 bash 将带空格的字符串解释为单个字符串,而不是两个单独的字符串。但在这里它没有按预期工作。
/root# !"ping google"
bash: !"ping: event not found
/root# !'ping google'
bash: !'ping: event not found
/root# "!ping google"
"ping 192.168.100.7 google google"
/root# '!ping google'
bash: !ping google: command not found
/root# !\"ping google\"
bash: !\"ping: event not found
/root# !(ping google)
bash: !: event not found
这将调用命令,但它将调用包含字符串的最后一个命令。我只想要以“ping”开头的命令
/root# !?google
ping google.com
我可以做我想做的事吗?
答案1
您可以使用向后搜索(如果编辑模式设置为 emacs,这是默认设置,则为 control-r),它与空格一起使用。
答案2
我想到了一些方法:
使用
?
。以下内容来自man history
:!?string[?] Refer to the most recent command preceding the current postition in the history list contain‐ ing string. The trailing ? may be omitted if string is followed immediately by a newline.
因此,你应该能够做到这一点:
!?ping google?
使用反向搜索功能。点击CtrlR并开始输入
ping google
。找到相关命令后按回车键。