26

I set ~/.bash_profile some time ago to have more than 500 lines length but seems system can't catch this.

Do you know why?

> nano -w ~/.bash_profile
export CLICOLOR=1
export LSCOLORS=GxFxCxDxBxegedabagaced
HISTFILESIZE=10000000

> history | wc -l
     500
33

You also need to set HISTSIZE=10000000.

HISTFILESIZE determines the number of lines to keep in the history file while HISTSIZE determines the number of lines to keep in memory. Both default to 500

Execute echo $HISTFILESIZE $HISTSIZE before you make the change and then again after. You should see 10000000 500 first then 10000000 10000000 after.

15

You need to export HISTSIZE and HISTFILESIZE environment variables in your ~/.bash_profile file.

Add following lines in your ~/.bash_profile:

# history size
export HISTFILESIZE=1000000
export HISTSIZE=1000000
8

Answer:

All you need to do is set HISTSIZE in your bash profile (~/.bash_profile). You can leave HISTFILESIZE unset. This will configure both the in-memory history and the file-based history.

# Saves 10 million lines in memory and in the bash history file.
HISTSIZE=10000000

Explanation, additional information.

The problem is HISTFILESIZE only sets the maximum history stored to file when you startup a session. HISTSIZE is what determines how many lines get saved at the end of a session. If HISTFILESIZE is larger than your HISTSIZE, you'll never see more than your HISTSIZE because the file is getting overwritten with HISTSIZE commands (unless you set history to append, but that is a separate topic: look up histappend in shell builtin commands for that).

This is the reason you're seeing no effect. With HISTSIZE at default (probably 500) your history file is always getting overwritten by the most recent $HISTSIZE commands. Anything older (which could potentially grow the list past $HISTSIZE) is wiped away.

For most cases there's no need to set HISTFILESIZE independently of HISTSIZE.

HISTSIZE determines how many lines will get written to the history file. The command list is truncated upon exit, before writing to the history file, keeping N most recent lines. By default, this list overwrites the history file.

HISTFILESIZE determines how large the history file (in lines) can be. The file gets truncated upon startup, keeping N most recent lines. In addition, the history file is potentially truncated whenever HISTFILESIZE is set.

Finally, although it appears to be undocumented, BASH sets HISTFILESIZE based on HISTSIZE if HISTSIZE is set during startup. I've tried this out on macOS, and a few varieties of Ubuntu, and the behavior is consistent. If you set HISTSIZE in a launch file (not via the command line by any means), HISTFILESIZE will be set to match. (Try it yourself: set HISTSIZE to some arbitarily large value in .bash_profile, exit and start a new terminal, then echo $HISTSIZE $HISTFILESIZE and you'll find them matching.)

As a result, there's no reason to touch HISTFILESIZE unless you want different values, and the uses cases to have different values are rare (and typically involve more history customization settings to get something useful).

You must log in to answer this question.

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