我知道 bash 功能 !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
Run Code Online (Sandbox Code Playgroud)
我想使用 ! 来调用线路“ping google.com”。特征。我尝试了一些事情,但失败了:
这是标准行为,它运行最后一个 ping 命令
/root# !ping
ping 192.168.100.7
Run Code Online (Sandbox Code Playgroud)
一个简单的字符串,后面有空格!不起作用
/root# !ping google
ping 192.168.100.7 google
Run Code Online (Sandbox Code Playgroud)
据我所知,引号告诉 bash 将带有空格的字符串解释为单个字符串,而不是 2 个单独的字符串。但在这里它并没有按预期工作。
/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
Run Code Online (Sandbox Code Playgroud)
这将调用该命令,但它将调用包含该字符串的最后一个命令。我只想要以“ping”开头的命令
/root# !?google
ping google.com
Run Code Online (Sandbox Code Playgroud)
可以做我想做的事吗?
我可以想到几种方法:
\n\n使用?。以下内容来自man history:
!?string[?]\n Refer to the most recent command preceding the\n current postition in the history list contain\xe2\x80\x90\n ing string. The trailing ? may be omitted if\n string is followed immediately by a newline.\nRun Code Online (Sandbox Code Playgroud)\n\n所以,你应该能够这样做:
\n\n !?ping google?\nRun Code Online (Sandbox Code Playgroud)使用反向搜索功能。点击CtrlRans 开始输入ping google。找到相关命令后按 Enter 键。