Тело функции, определенное в/etc/profile, появляется в истории оболочки на входе в систему

Мы выполняем IBM AIX сюда (в настоящее время 7100-03-03-1415), который пропускает изрядное количество служебной предварительной установки в других версиях UNIX. Одной из вещей, которые мы должны сделать на полурегулярной основе, является преобразование со времени эпохи к стандартной метке времени. Для решения этой проблемы я создал эту функцию и поместил ее в /etc/profile:

## Functions that are useful enough to be inherited by everyone ##
# Prints timestamp from epoch time
epoch() {

        if [ $# -eq 1 ] ; then
                SECONDS="$1"
        elif [ -t 0 ] || [ $# -gt 1 ] ; then
                echo "Usage: epoch <timestamp>"
                return 127
        else
                read SECONDS
        fi

        perl -e 'print scalar localtime $ARGV[0],"\n"' $SECONDS
        return 0
}

Функция берет или аргумент или читает из stdin и печатает преобразованную метку времени.

Начиная с продвижения этой функции ко всем нашим LPARs для использования через плату я заметил, что текст функции появляется в каждом пользователи .sh_history после порождения новой оболочки:

ls -la
ssh localhost

        if [ $# -eq 1 ] ; then
                SECONDS="$1"
        elif [ -t 0 ] || [ $# -gt 1 ] ; then
                echo "Usage: epoch <timestamp>"
                return 127
        else
                read SECONDS
        fi

        perl -e 'print scalar localtime $ARGV[0],"\n"' $SECONDS
        return 0
}
cat .sh_history

Я никогда не видел ничего как это прежде. Это не влияет на производство или время работы, таким образом, это - больше любопытства, чем что-либо еще. Очевидно, что функция читается при загрузке оболочки пользователя, но что заставило бы это печатать к истории оболочки?

Отредактированный для добавления: В настоящее время выполняя ksh версию M-11/16/88f.

2
задан 22 February 2016 в 02:41
1 ответ

Это на самом деле предполагаемое поведение; ksh автоматически регистрирует все определения функций в файле истории.

Этот параметр можно отключить с помощью параметра «nolog»: set -o nolog

2
ответ дан 3 December 2019 в 11:40

Теги

Похожие вопросы