Science and technology

How to make use of Bash historical past instructions

Bash has a wealthy historical past. That is, it is an outdated shell with an excellent older ancestor (the Bourne shell), however it additionally has an important historical past command that surpasses all different shell historical past interfaces based mostly on its variety of options. The Bash model of historical past permits for reverse searches, fast recall, rewriting historical past, and extra.

The historical past command is not like many different instructions. You could be used to instructions being executable recordsdata positioned in widespread system-level places like /usr/bin, /usr/native/bin, or ~/bin. The built-in historical past command is not in your PATH and has no bodily location:

$ which historical past

which: no historical past in [PATH]

Instead, historical past is a built-in operate of the shell itself:

$ sort historical past
historical past is a shell builtin
$ assist historical past
historical past: historical past [-c] [-d offset] [n] or
historical past -anrw [filename] or
historical past -ps arg [arg...]

Display or manipulate the historical past checklist.
[...]

For that motive, the historical past operate in every shell is exclusive, so what you utilize in Bash might not work in Tcsh or Fish or Dash, and what you utilize in these might not work in Bash. In some circumstances, realizing what Bash can do might encourage customers of different shells to create fascinating hacks to clone Bash conduct, and it might unlock Bash options that you just by no means knew existed.

View your Bash historical past

The most simple and frequent use of the historical past command is to view a historical past of your shell session:

$ echo "hello"
hey
$ echo "world"
world
$ historical past
  1  echo "hello"
  2  echo "world"
  three  historical past

Event designators

Event designators search by means of your historical past by occasion. An occasion on this context is a command logged in your historical past, delineated by a newline character. In different phrases, it is one line, marked by an index quantity for reference.

Event designators largely begin with an exclamation level, generally additionally referred to as a bang (!).

To rerun a command out of your historical past, use the exclamation level adopted instantly (no areas) by the index variety of the command you need. For occasion, assume line 1 incorporates the command echo "hello", and also you wish to run it once more:


You can use relative positioning by offering a unfavourable variety of traces again out of your present place in historical past. For instance, to return three entries in historical past:

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

If you are simply going again one line, you need to use the shorthand !! as an alternative of !-1. That’s a financial savings of 1 entire keystroke!

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

You also can seek for a selected string by means of the entries, in reverse, for a command to run. To seek for a command beginning with a selected string, use an exclamation level adopted instantly (no house) by the string you wish to seek for:

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

You also can seek for a command containing a string in any place (not simply initially). To do this, use ! plus the string you are trying to find, as normal, however encompass the string with query marks on both finish. You might omit the trailing query mark if you realize that the string is instantly adopted by a newline character (that means it is the very last thing you typed earlier than you pressed Return):

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

String substitution

Similar to looking for strings initially of a line, you possibly can seek for a string and change it with a brand new string, altering the command:

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

Make historical past helpful

In Bash, the historical past command is able to rather more than what’s been lined right here, however this can be a good begin for getting used to utilizing your historical past as an alternative of simply treating it as a reference. Use the historical past command usually, and see how a lot you are able to do with out having to sort instructions. You may shock your self!

Most Popular

To Top