Visit Our UNIX and Linux User Community


[ksh] how to reload history file without entering a command


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting [ksh] how to reload history file without entering a command
# 1  
Old 12-27-2018
[ksh] how to reload history file without entering a command

I'm basically looking for the ksh equivalent of bash's PROMPT_COMMAND="history -r", where simply redrawing the command prompt in a terminal will cause ksh to reload the history file.

At the risk of sounding incredibly lazy (in which case I would be guilty as charged), I've noticed that if I have two terminals open--call them terminal A and terminal B--and run some commands in terminal A, I can only see those commands in terminal B (while scrolling up and down through the history) after I execute a command in terminal B. What I would like is for me to be able to just press enter at the command prompt in terminal B--without having to execute a command--and then be able to see the commands from terminal A.

Is there a setting in .kshrc that would force the shell to reload the history file each time the command prompt is drawn?
# 2  
Old 12-27-2018
You might have better luck getting a reply from our ksh experts after the holidays.

Did you try searching the forums?
# 3  
Old 12-27-2018
I did try searching, but no luck. I guess nobody using ksh as their interactive shell is as lazy as I am.

Hopefully one of the ksh experts will get back to me after holidays. In the meantime, I realized that ksh does not actually need to execute a command in order to reload the history file: While typing Enter by itself does not trigger a reload, typing anything (even just a semicolon) followed by Enter does.

So it seems that ksh's default behavior when it comes to the history file is "append then reload". My question for the experts is whether there is a command does "just reload". I've already looked at the ksh man page and snooped around for options to the fc command, no luck. If there is such a command, adding it to my prompt_commands function (see my "On korn shell, how to share history..." thread--apparently I'm still too new here to share the link) should do the trick.
# 4  
Old 12-27-2018
Try:
Code:
alias r='fc -e -'

in ksh 88. I'm not quite sure what you meant by refresh, history -r is "recall" the way we used it, anyway. Using r alias:
r somecommand # recall a command, to edit the command you see, you need to have previously exported the EDITOR variable export EDITOR=vi Use the up arrow to scroll in reverse time order (from newest to oldest) from the point the r alias finds for you.

Code:
# start recall from last command issued.
r

# 5  
Old 12-28-2018
Thank you, Jim, that is a useful alias but not what I'm looking for. I'll try to explain it differently:

When I'm working, I often have multiple terminal emulators open at once. If I pick any one of them and start pressing the up and down arrows, I don't see the commands recently run in the other open terminals. I'm looking for something to put in ~/.kshrc that will cause terminals to re-parse/reload my HISTFILE just by pressing Enter at a command prompt (without having to type anything at the prompt). This way, whenever I am jumping between terminals, when I pick a random one I can simply press Enter and then pressing the up and down arrows show me all the commands in my HISTFILE.

Hope that's more clear.

-- Post updated at 03:36 AM ---

Perhaps most succinctly: Is there a command that flushes korn shell's history buffer and replaces it with contents of HISTFILE?
# 6  
Old 12-28-2018
Got it. Do not put a leading dot on the history file name, which means you have to declare HISTFILE. (ksh93). This lets you get buffering and then writing to the history file without erasing the contents. As an aside a lot of command C code evaluates environment variables. It may also set some.
Try:
Code:
strings/usr/bin/ksh | egrep '(HIST|FILE|SIZ)'

Then try dinking around with some of the variables. If the shell you use will not get updated like bash does, this can be one way to get custom behaviors.
Alternatively, if you can read C, consider spending some time read the source code for ksh93 if that is your shell. The code is now on github.
See: Building ksh from Source Code (Learning the Korn Shell, 2nd Edition)
This User Gave Thanks to jim mcnamara For This Post:
# 7  
Old 12-28-2018
Quote:
Originally Posted by jim mcnamara
... If the shell you use will not get updated like bash does, this can be one way to get custom behaviors.
Alternatively, if you can read C, consider spending some time read the source code for ksh93 if that is your shell. The code is now on github. ....
This is immensely important for technical people who are pushing the envelope or working on custom behaviors.

It's always best to go to the source code, when available, to understand what is going on under-the-hood and to add custom code.

Arguably, reading C or C++ code is a lot more difficult than reading PHP or Javascript or Python or C#, etc. at least for me, I find C or C++ is too down-in-the-weeds to easily grasp the functionality of the code.

I spend a lot of time coding, I mean a LOT Of time coding, and at least for me, writing code is a kind of digital artistic poetry, where bug hunting makes me smile and odd behavioral issues turn me into a kind of Sherlock Holmes for code.

Side story:

I was in truck riding along in the mountains with a US-born web developer turned real-estate agent recently. We were talking about coding and he told me he often slams the keyboard down or yells at his computer when coding and doing IT. He looked at me for affirmation of his frustration. I told in in reply that I mostly get joy from IT and coding, and often find myself smiling when bug hunting and when things do not go as expected. In fact, I told him that I find it hard to have any emotions when coding and problem solving, except for joy, and when I wake up in the morning, I am really excited to have that cup of java and login and code solutions my mind figured out when I was asleep.

Sometimes even here, I see people getting emotional over something (recently a moderator threatened to quit because they don't like some of my code changes and the transitions I am working on here). I am surprised by this and this has led to be believe I've been working in IT for so long, that writing code brings me truly great joy. Negative emotions are not really useful and so I don't have them over anything. However, I see a lot of IT people carry around with them a lot of frustration and anger and emotions related to IT and technology (mostly the middle aged and much older IT people, not the younger generation).

Anyway, I'm well off topic.

My point is that IT is a joy, coding is not some "geeky thing for losers" but it is a blessing and a great way to use your mind. Jim was right on to suggest looking at the ksh source for DevuanFan's custom ideas; and I hope DevuanFan will read the source and post back the code, the details he learned and his proposed solution

If you are in IT and do not love to code, search code, read code, write code, you are in the wrong business or hobby!

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Script not entering VRFY after nc command

I am making a bash script right now and am running into an issue. As I am new to scripting, I do not know exactly what to do to get what I'm looking for in my script. Essentially, my script will automatically input VRFY common names after nc Example: nc 192.168.248.133 25 VRFY Allison... (2 Replies)
Discussion started by: ksrhayward
2 Replies

2. AIX

Checking the command history file in AIX

Hello, The system has been rebooted and I need to see the commands executed in the system prior to restart by the oracle user.The history command is not showing me the commands executed prior to reboot. Please advise. Best regards, Vishal (1 Reply)
Discussion started by: Vishal_dba
1 Replies

3. Shell Programming and Scripting

UNIX CO command for file version history

Hello :) I'm a newb when it comes to shell scripting and was wondering about a command(s) for a script that could be used to checkout a certain number of version/revision histories of a file. I know for the latest revison you "co filename" or for a certain revision number "co -r*.* filename"... (2 Replies)
Discussion started by: MN-DBA
2 Replies

4. UNIX for Dummies Questions & Answers

Command to reload a zone

I just created a CNAME and i was told a zone needs to be reloaded after creating a CNAME. What is the command to reload a zone after the CNAME has been created? Thanks in advance (1 Reply)
Discussion started by: German Shepherd
1 Replies

5. Solaris

Login delay after entering id (40 secs) same after entering pw

Hi all, I have just installed Solaris 10 on an old Fujitsu Primepower 650 which has been wiped clean. I haven't installed anything apart from the OS yet, so the machine is 99% idle. I get long delays when logging in, first after entering the id then another long delay after entering a valid... (8 Replies)
Discussion started by: longjon
8 Replies

6. Shell Programming and Scripting

What is the ksh equivalent to bash's "history -c" command?

Hi, What is the korn shell equivalent of bash shell's "history -c" command? I do know, how to clear the history list in ksh, I can do the following: > ~/.sh_historybut still, I am interested to know the single one line command as 'history -c' gives error on my ksh (1 Reply)
Discussion started by: royalibrahim
1 Replies

7. Solaris

Command for checking modification history on file

What is the command for checking modification history on file? ---------- Post updated at 01:20 PM ---------- Previous update was at 12:35 PM ---------- Let me rephrase this. On a regular Unix file can I at least check to see the time and date history modification of the file? (6 Replies)
Discussion started by: jastanle84
6 Replies

8. UNIX for Dummies Questions & Answers

Reload user crontab file

Hi Guys, Our user crontab files are located at /var/spool/cron/crontabs. I have to make some modifications to it. I have all the crontab entries in a file called 'crontab.actual'. I made changes to this file and now I want to reload these changes from the crontab.actual file to my crontab... (12 Replies)
Discussion started by: vandi
12 Replies

9. UNIX for Dummies Questions & Answers

ksh: how to make [up arrow] recall command history

I want to get my up arrow key to recall my previous commands in Korn shell. Anyone help please? thanks a bunch! BG (3 Replies)
Discussion started by: BG_JrAdmin
3 Replies

10. UNIX for Dummies Questions & Answers

entering a long command

hello everyone! Very basic question for the guru's in here but anyways, I am trying to type a command that is longer than the line. What character do I use to continue my command on the next line? Thanks in advance.... Todd (1 Reply)
Discussion started by: hedrict
1 Replies

Featured Tech Videos