2

For work, I remote into a linux server that uses c shell rather than bash using Remote Desktop. While in session (lets call it session 1) I'll open up many tabs in a given terminal and type commands throughout all of them. I'll also sometimes open up additional sessions (lets call them session 2 and session 3) with many tabs in their respective terminals and type many commands throughout all of them.

I have noticed that the history command when invoked in any tab of any terminal across any session does not include all of the commands I have used across all of the tabs and sessions. only part of the commands are saved.

I would like a history that:

  • Remembers all commands typed, regardless of what tab, terminal or session I am in
  • Instantly accessible from any of tabs/terminals/sessions

While there is a great post from nearly 12 years ago that describes how to do exactly this, that is for a bash environment, not a c shell environment. As such, there is no .bashrc but rather a .cshrc. I'm looking for a solution that works in the c shell environment.

UPDATE:

I tried adding this to the top of the .cshrc file:

set history=10000
set savehist=(10000 merge)
alias precmd 'history -L, history -S'

Where set history=10000 sets the size of the history list,

set savehist=(10000 merge) sets the number of lines in the history list to save to the .history upon exit of a session, and the merge merges the history of a session with the overall history upon exit,

alias precmd 'history -L; history -S' sets some commands to run before every command at the terminal is ran. The -L option appends a history file to the current history list. The -S option writes the history list to a file.

This didn't do what I wanted. Now every time I type history at the terminal, the size of the command history list jumps up in size dramatically. The command history list isn't updated across terminal tabs in a session.

I tried this too, with no improvement:

set history = 10000
set histdup = erase
set savehist = (${history} merge lock)

alias precmd 'history -S' alias postcmd 'history -M'

I'm not entirely sure what all of the lines mean, but I know that precmd supposedly means before a command is ran, do this and postcmd supposedly means after a command is ran do this. The -M option merges the contents of the history file with the current history list and sorts the resulting list by the timestamp contained with each command.

I feel like I am close, like I'm missing some key line to add in the .cshrc file, or maybe I need to change the order around.

Dan
  • 21
  • Couple suggestions: first, does the server have multiple shells installed? If it does, you can actually change the shell on a per-user basis without administrator privileges using chsh (if you didn't know that - sorry if you do). If that's not an option, there might be a way to do this using GNU screen which is a pretty powerful tool for terminal multiplexing etc in its own right. – re-cursion Feb 02 '22 at 02:40
  • From what I've been told, we're highly encouraged not to change from csh. Reasons why flew over my head. So if possible, I'd like to find a way in to make these changes while remaining in csh. Additionally, I'd like to achieve this by making changes to .cshrc. – Dan Feb 02 '22 at 17:23

0 Answers0