recent icon indicating copy to clipboard operation
recent copied to clipboard

tcsh support

Open saltlakeryan opened this issue 3 years ago • 2 comments

I've hacked together tcsh support by creating a ~/bin/tcsh-log-recent.sh and configuring .cshrc to call it (similar to the bash setup):

#!/bin/tcsh

#usage: call script with arguments: PID, EXIT_CODE, HISTORY_LINE (formatted as described below)
# make sure to run this to set proper history format in .cshrc:
# alias precmd '~/bin/tcsh-log-recent.sh $$ $? `history 1`'
#
# expect history command to output in this format (though only one line):
#     55	14:58	vim foo bar bla
#     56	14:58	ls /tmp /usr
#     60	14:59	which command
#     ...

set CMD_PID=$1
set CMD_RESULT=$2
set CMD_SEQUENCE=$3
set CMD_HISTORY=`echo $* | cut -d ' ' -f 5-`

log-recent -p $CMD_PID -r $CMD_RESULT -c " $CMD_SEQUENCE  $CMD_HISTORY"

saltlakeryan avatar Apr 11 '22 22:04 saltlakeryan

@saltlakeryan I would like to write a similar shell script for bash so that I can log commands in other contexts. In your script, can you explain what the set CMD_HISTORY line is doing?

chmaynard avatar Sep 19 '22 08:09 chmaynard

Yeah, my understanding is that echo $* outputs all of the arguments to the current script. Since the script is called with the arguments of $$, $?, and history 1, it should echo out something like:

4075 0 25 14:00 vim /tmp/somefile.txt

The cut command uses space as a delimiter and captures everything from the 5th field onward. In the above example, it would get trimmed to:

vim /tmp/somefile.txt

The only issue I've noticed is that wildcards and other special shell interpretations get captured after evaluation. For example, if I execute ls * in a directory with file1, file2, and file3, it gets stored in the sqlite db as ls file1 file2 file3. Here's an example of that:

mypc [/tmp/test]% touch file1 file2 file3 file4
mypc [/tmp/test]% ls *
file1  file2  file3  file4
mypc [/tmp/test]% recent -n 1
2022-10-05 14:07:40 ls file1 file2 file3 file4

saltlakeryan avatar Oct 05 '22 21:10 saltlakeryan