1

My typical work flow at the bash prompt consists in typing commands and retrieving them using the Ctrl+R "literal" mechanism.

I have noticed over possibly the last couple of years that there are times where a command randomly disappears from the bash history.

Say I type and execute successfully the following:

$ command A arg1 arg2
$ command B arg3
$ command C arg4

… and type Ctrl+R arg1 — e.g. I get a "failed-reverse-i-search `arg1' ..." error.

Something of interest is that if I follow up with a:

$ history | less

... command A is indeed NOT the history... but I have a line that starts with an asterisk in "column 0" of the history ­— column 0 means the column just left of the column where the commands logged in the history start ­— followed by a blank line.

Has anyone seen anything like this?

This is on a debian/linux stable (buster) running bash 5.0.3.

1
  • IIRC it happens when the line in history is edited, but I can't remember what settings control that etc
    – ilkkachu
    Feb 23, 2020 at 23:27

2 Answers 2

3

Has anyone seen anything like this?

Yes. To reproduce:

  1. Run echo foo.
  2. Run echo bar.
  3. so echo foo appears (or Ctrl+rfoo, so echo foo appears, then hold to get to the end of the line).
  4. Hold Backspace, turn echo foo into an empty line, do not execute.
  5. , so echo bar appears.
  6. Enter to execute echo bar again.

Then history will print an empty entry where you might expect echo foo. It will be marked with * meaning this entry has been edited.

Check the revert-all-at-newline readline variable (see man 3 readline).

  • Temporary setting: run bind 'set revert-all-at-newline On' in Bash.
  • Persistent setting for new Bash instances: place set revert-all-at-newline On in /etc/inputrc or ~/.inputrc.
1
  • Excellent. Used your scenario to re-create. Since I don't use cursor arrows or Backspace preferring CTRL+U CTRL+W CTRL+A CTRL+E etc… it's not obvious how I manage to run into this ­— on rare occasions… must be a scenario where perhaps I mistype my search argument and clear the command-line before I retry a CTRL+R…? But now I know about this readline feature I'll just set revert-all-at-newline variable to On (bind -V shows it's currently off in my profile) to be on the 'safe side'… and this should take care of the problem. Must count myself as very lucky indeed I got an informed answer so fast! Feb 24, 2020 at 0:04
0

If there is a space before your command, it will not be logged.

2
  • No. In this particular case the command is a compilation which was retrieved a few dozen times during the session, with the appearance on the screen of the command followed by a CTRL+A to get out of command-retrieval mode and move the cursor to the beginning of the command and then followed by <Enter>. Feb 23, 2020 at 23:08
  • Just tested in my setup. If I enter <space+command> (something I do not use frequently) the command is not logged in the history list (as expected) but I do not get an empty line in the history (with an asterisk in the column between the command number and the commands proper) either: if I do command A + command B (prefixed by a space) + command C there is not trace in the history list of my having entered anything in between command A and command C. Seems like a description of what exactly these empty lines with an asterisk are might help? Feb 23, 2020 at 23:21

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .