如何使用 Bash history 命令
创始人
2024-03-02 05:10:17
0

Bash 的 history 命令在它提供的功能数量上超过了所有其他 Linux Shell 历史接口。

Bash 有丰富的历史。也就是说,它是一个古老的的 shell,还有一个更古老的 Shell (Bourne shell)的前辈,但是它还有一个很棒的 history 命令,它提供的功能数量超过了所有其他 shell 的历史接口。 Bash 版本的 history 可进行反向搜索、快速调用、重写历史记录等。

history 命令与许多其他命令不同。你可能习惯于将命令作为可执行文件放在常见的系统级位置,例如 /usr/bin/usr/local/bin 或者 ~/bin。 内置的 history 命令不在你的 PATH 中并且没有物理位置:

$ which history

which: no history in [PATH]

相反,history 是 shell 本身的内置函数:

$ type history
history is a shell builtin
$ help history
history: history [-c] [-d offset] [n] or
history -anrw [filename] or
history -ps arg [arg...]

Display or manipulate the history list.
[...]

出于这个原因,每个 shell 中的历史功能都是独特的,因此你在 Bash 中使用的功能可能无法在 Tcsh 或 Fish 或 Dash 中使用,而在这些 shell 中使用的功能可能也无法在 Bash 中使用。在某些情况下,了解 Bash 可以做什么可能会激发其他 shell 的用户创建有趣的改造来复制 Bash 行为,并且可能会解锁你从未知道的 Bash 功能。

查看你的 Bash 历史

history 命令最基本、最频繁的用法是查看 shell 会话的历史记录:

$ echo "hello"
hello
$ echo "world"
world
$ history
  1  echo "hello"
  2  echo "world"
  3  history

事件指示器

事件指示器 Event designator 按事件搜索你的历史记录。在这里,“事件”是指记录在历史中的命令,以换行符划定。换句话说,一行一个事件,以索引号来标记。

事件指示器大多以感叹号开头,有时也称为 “bang”(!)。

要从你的历史记录中重新运行命令,请使用感叹号,之后紧跟(之间没有空格)所需命令的索引号。例如,假设第 1 行包含命令 echo "hello",你想要想再次运行它:

$ !1
echo "hello"
hello

你可以使用相对定位,提供基于你历史中当前位置向后的负数行号。例如,返回到历史中倒数第三个条目:

$ echo "foo"
foo
$ echo "bar"
bar
$ echo "baz"
baz
$ !-3
echo "foo"
foo

如果只想回去一行,那么可以使用速记 !! 代替 !-1。这节省了按键时间!

$ echo "foo"
$ !!
echo "foo"
foo

字符串搜索

你也可以对条目搜索特定的字符串,反过来搜索要运行命令。要搜索以指定字符串开始的命令,请使用感叹号,之后紧跟(没有空格)要搜索的字符串:

$ echo "foo"
$ true
$ false
$ !echo
echo "foo"
foo

你还可以在任意位置(不仅是开头)搜索包含该字符串的命令。为此,请像之前一样使用 ! 加上要搜索的字符串,但在字符串的两端都用问号(?)围绕起来。如果你知道该字符串后紧跟一个换行符,那么可以省略最后的问号(就是在按回车之前输入的最后字符):

$ echo "foo"
$ true
$ false
$ !?foo?
echo "foo"
foo

字符串替换

类似于在行首搜索字符串,你可以搜索字符串并用新字符串替换它,以更改命令:

$ echo "hello"
hello
$ echo "world"
world
$ ^hello^foo
echo "foo"
foo

让 history 有用

在 Bash 中,history 命令的功能远远超过此处介绍的内容,但这是一个很好的开始, 可以让你习惯使用你的历史记录, 而不是仅仅把它当作一个参考。经常使用 history 命令,并试试无需输入命令即可执行的操作。你可能会感到惊讶!


via: https://opensource.com/article/20/6/bash-history-commands

作者:Seth Kenlon 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

相关内容

Adobe 2026财年Q...
图源:Pexels Adobe 公司董事长兼首席执行官山塔努 ·...
2026-03-13 09:13:09
开源证券:看好券商板块春季...
每经AI快讯,3月6日,开源证券发布研报指出,盈利高景气延续+低估...
2026-03-06 09:17:51
【刚刚,OpenClaw登...
【刚刚,OpenClaw登顶GitHub软件星标历史第一!已超越L...
2026-03-03 16:48:58
魅族也转型了,变成AI驱动...
湾区老吴 时代在变,企业也在更迭。这一波AI浪潮,很多企业又来到...
2026-02-27 12:50:01
安盛:已从AI投资中获益
来源:环球市场播报 这家法国保险公司的Guillaume Bori...
2026-02-26 15:20:16

热门资讯

2020 年的 GitHub ... 距离 2020 年结束只剩下区区 24 天,我们即将结束魔幻的 2020 ,迎来新的一年,新的一年或...
开源新闻速递:openSUSE... 今日关注openSUSE 项目组的 Dominique Leuenberger 在他的周报中说:“这...
KDE4.11 Beta1 正...   KDE 项目工作组刚刚发布了 KDE Software Compilation 4.11 Bet...
Helix:高级 Linux ... 说到 基于终端的文本编辑器,通常 Vim、Emacs 和 Nano 受到了关注。这并不意味着没有其他...
如何在 Github 上创建一... 学习如何复刻一个仓库,进行更改,并要求维护人员审查并合并它。你知道如何使用 git 了,你有一个 G...
《Apex 英雄》正式可在 S... 《Apex 英雄》现已通过 Steam Deck 验证,这使其成为支持 Linux 的顶级多人游戏之...
使用时间序列数据,用开源工具助... InfluxData 是一个开源的时间序列数据库平台。下面介绍了它是如何被用于边缘应用案例的。收集到...
OpenWrt 21.02 发... OpenWrt 社区宣布了该发行版的最新稳定版本:OpenWrt 21.02。补充一句,OpenWr...
JStock:Linux 上不... 如果你在股票市场做投资,那么你可能非常清楚投资组合管理计划有多重要。管理投资组合的目标是依据你能承受...
Textual:为 Pytho... 快速入门使用 TextualPython 在 Linux 上有像 TkInter 这样的优秀 GUI...