Shell Save command history in sh terminal

Hi All,
I am trying to save history in FreeBSD 14.2 sh terminal because it does not appear to be saving history across sessions. Below is the code and resulting .profile file
Code:
# Save sh terminal command history
echo 'HISTFILE=~/.sh_history' >> /home/michael/.profile
echo 'HISTSIZE=1000' >> /home/michael/.profile
echo 'trap "history -a" EXIT' >> /home/michael/.profile
echo 'history -r "$HISTFILE"' >> /home/michael/.profile
chown michael:michael /home/michael/.profile

Shell:
Code:
michael@cs:~ $ echo $SHELL
/bin/sh
.profile file:
Code:
#
# .profile - Bourne Shell startup script for login shells
#
# see also sh(1), environ(7).
#

# These are normally set through /etc/login.conf.  You may override them here
# if wanted.
# PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin:$HOME/bin; export PATH

# Setting TERM is normally done through /etc/ttys.  Do only override
# if you're sure that you'll never log in via telnet or xterm or a
# serial line.
# TERM=xterm;     export TERM

EDITOR=vi;       export EDITOR
PAGER=less;      export PAGER

# set ENV to a file invoked each time sh is started for interactive use.
ENV=$HOME/.shrc; export ENV

# Let sh(1) know it's at home, despite /home being a symlink.
if [ "$PWD" != "$HOME" ] && [ "$PWD" -ef "$HOME" ] ; then cd ; fi

# Query terminal size; useful for serial lines.
if [ -x /usr/bin/resizewin ] ; then /usr/bin/resizewin -z ; fi

# Display a random cookie on each login.
if [ -x /usr/bin/fortune ] ; then /usr/bin/fortune freebsd-tips ; fi
HISTFILE=~/.sh_history
HISTSIZE=1000
trap "history -a" EXIT
history -r "$HISTFILE"

However, still the terminal does not record the command history.

Thanks & Best Regards
AMJS
 
Some month go sh has been updated with a history function.For curiosity I have tried its function.
fc -l lists the last commands. history -a appends to the history which can also be monitored by checking the histfile. The default is ~/.sh_history.

The strange thing is that history works but triggers an error message. It is also not mentioned in sh().

EDIT: correction, it is not .sh:history but .sh_history
 
history -a appends to the history which can also be monitored by checking the histfile.
Ah, as SirDice mentioned, I missed the alias from the default ~/.shrc. Nevertheless, the OP's config is clearly wrong, as fc doesn't have appending/reading functionality similar to history -a|-r in bash(1). Furthermore, the whole history capability in sh(1) should work without any additional configuration ( HISTFILE and HISTSIZE defaults to ~/.sh_history and 100, respectively).
 
Hi All,
I am trying to save history in FreeBSD 14.2 sh terminal because it does not appear to be saving history across sessions. Below is the code and resulting .profile file

Code:
# Save sh terminal command history
echo 'HISTFILE=~/.sh_history' >> /home/michael/.profile
echo 'HISTSIZE=1000' >> /home/michael/.profile
echo 'trap "history -a" EXIT' >> /home/michael/.profile
echo 'history -r "$HISTFILE"' >> /home/michael/.profile

Try to put these commands in ~/.shrc instead of ~/.profile, I am not sure that ~/.profile is meant for that.
 
Looks like almost everything went wrong :)
  • The specified commands do nothing useful;
  • If they did something useful, they're still in the wrong place (credit to gotnull);
  • If the configuration itself were OK, ~/.sh_history is still a directory (credit to Andriy);
  • If it were a file, it's still owned by root (credit to covacat);
  • Finally, SIGHUP isn't catched by the shell itself, so in some cases the history won't be saved anyway (credit to chrbr).
Schroter, you can fix these issues as follows:
  • Delete/rename your ~/.sh_history directory;
  • Remove last 4 lines from your ~/.profile;
  • If you need more than 100 history items, add HISTSIZE=1000 to the ~/.shrc;
  • Try to close the shell gracefully (e. g. press Ctrl-D or type exit).
 
Should it really be a directory?
eseipi provided the answer. I was not closing the terminal the proper way. (e. g. press Ctrl-D or type exit). That is why it was not saving terminal commands with the default settings. The default settings work just fine. Thanks
 
Back
Top