2011-01-04 7 views
1

У меня есть две машины Unix, работающие под управлением AIX 5.3
My $ HOME смонтирован на machine1.
Использование NFS, login machine2 перейдет к тому же $ HOMEстранное поведение команды fc -l

Сначала я вхожу в систему machine2, затем машина1.
Оба использования 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 ССО

ответ

0

Возможно, что Войти оболочка не КШ или что $HISTFILE это сбрасывается. Одна вещь, которую вы можете сделать, это echo $HISTFILE в различных ситуациях и посмотреть, не отличается ли это. Еще одна вещь, которую нужно проверить, - посмотреть, в какой оболочке вы используете ps.

Bash (по умолчанию $HOME/.bash_history), например, будет иметь значение $HISTFILE, чем ksh (по умолчанию $HOME/.sh_history).

Другая возможная причина различия заключается в том, что встроенный fc может видеть историю памяти, которая еще не была записана на диск (что внешний /usr/bin/fc не смог бы увидеть). Если это так, это зависит от версии. Например, Bash не записывает историю в файл до выхода оболочки. Ksh (по крайней мере, версия, которую я использую) немедленно записывает.

+0

Я уверен, что я бегу Ksh. Я уверен, что $ HISTFILE не установлен. Поскольку/etc/profile вызывает скрипт, который использует функцию, это делает ksh для записи в файл истории команд .sh_history. Мой .profile не может перезаписывать историю команд с использованием переменных HISTFILE. Итак, я просто не устанавливаю HISTFILE. Поэтому вывод может быть связан с историей памяти. Есть ли способ заставить мой логин ksh не использовать историю в памяти? –

+0

@Alvin: Я думаю, что ksh немедленно записывает в файл истории (это только проблема с Bash). Только интерактивные оболочки (обычно) записывают в файл истории - скриптов обычно нет. Что именно вы видите, и что вы пытаетесь сделать? Что вы имеете в виду, когда говорите, что скрипт, который использует функции, вызывает ksh для записи в файл истории при вызове из '/ etc/profile'? Я не вижу этого поведения. –

+0

Я имею в виду, что перед вызовом/определением функции мы должны установить $ HISTFILE. Поскольку/etc/profile вызывает вызов какого-либо скрипта, который определяет функцию, это делает/etc/profile для использования .sh_history для моей оболочки входа. Я не могу использовать $ HISTFILE для переопределения файла истории команд в моем .profile. ---------- Для чего именно я вижу? На самом деле, fc -l будет иметь число перед каждой командой. Fc -l дает число 3xx. Параметр/usr/bin/fc -l дает число 1xx. Вот почему я также подозреваю, что история в памяти еще не написана .sh_history –

1

Ах, мудрость древних ... (Так как этот пост более года.)

Во всяком случае, я просто столкнулся с этой проблемой в Solaris 10. Проблема, кажется, это: Когда вы определяете функцию в /etc/profile или в любом файле, который называется /etc/profile, ваша переменная HISTFILE игнорируется оболочкой Korn, а оболочка вместо этого использует ".sh_history" при доступе к ее истории. Не знаю, почему это так.

Результатом является то, что вы видите другие команды корневой оболочки.Вы можете проверить это с:

lsof -p $$ 

или

cat /proc/$$/fd/63 
Смежные вопросы