Using history command in bash script

Johnny Rosenberg gurus.knugum at gmail.com
Sun Feb 26 01:27:40 UTC 2012


2012/2/25 Bert Swart <bertswart at chello.nl>:
> On Fri, Feb 24, 2012 at 07:20:20PM +0100, Johnny Rosenberg wrote:
>> 2012/2/24 Bert Swart <bertswart at chello.nl>:
>> > On Fri, Feb 24, 2012 at 01:59:39PM +0100, Johnny Rosenberg wrote:
>> >> Den 24 februari 2012 13:12 skrev Johnny Rosenberg <gurus.knugum at gmail.com>:
>> >> > Seems not to be possible.
>> >> >
>> >> > ~$ cat > pa
>> >> > #!/bin/bash
>> >> >
>> >> > history
>> >> > history
>> >> > history
>> >> > <Ctrl+d>
>> >> > ~$ chmod +x pa
>> >> > ~$ pa
>> >> > ~$
>> >> >
>> >> > So there seem to be no history entries available when I run history
>> >> > from a bash script. Why is this?
>> >> >
>> >> > I also tried to use the ~/.bash_history file, but it doesn't seem like
>> >> > events are added to it for each command executed, since at least a
>> >> > couple of ten commands are missing at the end. Seems like things are
>> >> > added to the .bash_history file ”now and then”, I'm not sure how
>> >> > often. How can I get around this? Where are the latest history lines
>> >> > recorded before they are added to the actual .bash_history file?
>> >> >
>> >> > I'm trying to make a bash script that creates an alias for my last
>> >> > command and save it in my .bash-aliases file (which is launched from
>> >> > the .bashrc file), so I need some way to know what my latest command
>> >> > was.
>> >> >
>> >> >
>> >> > Kind regards
>> >> >
>> >> > Johnny Rosenberg
>> >> > ジョニー・ローゼンバーグ
>> >>
>> >> About that .bash_history file:
>> >> At the moment, my history is 620 entries. If I look in the
>> >> .bash_history file, the last command there match entry 527 of the
>> >> history command's output. Where are the 93 missing entries? Can I
>> >> force bash to write those to the .bash_history file?
>> > Yes, set history -a in your .bashrc
>>
>> Failed.
> Sorry, my mistake. Try adding to .bashrc:
> shopt -s histappend
> PROMPT_COMMAND='history -a'
>
> First command appends history instead of overwriting, second should write
> history after each command. Untested, I don't use it

Thanks, I'll try that tomorrow.

>> All that did was to add
>> entries to the .bash_history file when the
>> history -a command was run. After that, no more entries are added, at
>> least not for every time they are executed.
>>
>> I also tried to run history -a from my shell script, but history seems
>> to be blocked in a bash script.

> Correct, history can only be run from interactive shells. On non-interactive
> shell, such as your script, history doesn't return anything.

I wonder why. Can't see an obvious reason for that.


Kind regards

Johnny Rosenberg
ジョニー・ローゼンバーグ




More information about the ubuntu-users mailing list