开发者

strange behavior of fc -l command

I have two un开发者_C百科ix machines, both running AIX 5.3

My $HOME is mounted on machine1.

Using NFS, login machine2 will go to the same $HOME

I login machine2 first, then machine1.

Both using telnet.

The 2 sessions will share the same .sh_history file.

I found out that the fc -l behavior very strange.

In machine2, I issue the commands in telnet:

fc -l  
ksh fc -l

Both give the same output.

In machine1,

fc -l  
ksh fc -l 

give DIFFERENT results

The result for ksh fc -l is the same as /usr/bin/fc -l

Also, when I run a script like this:

#!/usr/bin/ksh  
fc -l 

The result is same as /usr/bin/fc -l

Could anyone tell me what happened?

Alvin SIU


Ah, wisdom of the ancients... (Since this post is over a year old.)

Anyway, I just encountered this problem in Solaris 10. Issue seems to be this: When you define a function in /etc/profile, or in any file called by /etc/profile, your HISTFILE variable gets ignored by the Korn shell, and the shell instead uses ".sh_history" when accessing its history. Not sure why this is.

Result is that you see other root shell's commands. You can test it with :

lsof -p $$

or

cat /proc/$$/fd/63


It's possible that the login shell is not ksh or that $HISTFILE is being reset. One thing you can do is echo $HISTFILE in the various situations and see if it's different. Another thing to check is to see what shell you're in using ps.

Bash (default $HOME/.bash_history), for example, will have a different $HISTFILE than ksh (default $HOME/.sh_history).

Another possible reason for the difference is that the builtin fc may be able to see in-memory history that hasn't been written to disk yet (which the external /usr/bin/fc wouldn't be able to see). If this is true, it may be version dependent. Bash, for example, doesn't write history to the file until the shell exits. Ksh (at least the version I'm using) writes it immediately.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜