fc -l命令的奇怪行为

时间:2011-01-04 13:54:04

标签: unix shell ksh

我有两台运行AIX 5.3的unix机器 我的$ HOME安装在machine1上 使用NFS,登录machine2将转到相同的$ HOME

我首先登录machine2,然后登录machine1 两者都使用telnet。

2个会话将共享相同的.sh_history文件。

我发现fc -l的行为很奇怪。

在machine2中,我在telnet中发出命令:

fc -l  
ksh fc -l

两者都给出相同的输出。

在machine1中,

fc -l  
ksh fc -l 

给出不同的结果
ksh fc -l的结果 与/usr/bin/fc -l

相同

另外,当我运行这样的脚本时:

#!/usr/bin/ksh  
fc -l 

结果与/usr/bin/fc -l

相同

有谁能告诉我发生了什么?

Alvin SIU

2 个答案:

答案 0 :(得分:1)

啊,古人的智慧......(因为这篇文章超过一年了。)

无论如何,我刚刚在Solaris 10中遇到过这个问题。问题似乎如下:当你在/etc/profile/etc/profile调用的任何文件中定义一个函数时,你的HISTFILE变量被Korn shell忽略,而shell在访问其历史记录时使用".sh_history"。不知道为什么会这样。

结果是您看到其他root shell的命令。你可以用以下方法测试它:

lsof -p $$

cat /proc/$$/fd/63

答案 1 :(得分:0)

登录shell可能不是ksh或$HISTFILE正在重置。您可以做的一件事是echo $HISTFILE在各种情况下,看看它是否不同。要检查的另一件事是使用ps查看您正在使用的shell。

例如,

Bash(默认$HOME/.bash_history)将具有与ksh不同的$HISTFILE(默认$HOME/.sh_history)。

另一个可能的原因是内置fc可能会看到尚未写入磁盘的内存中的历史记录(外部/usr/bin/fc将无法访问查看)。如果是这样,则可能与版本有关。例如,Bash在shell退出之前不会将历史记录写入文件。 Ksh(至少我正在使用的版本)立即写入。