Принудительное использование утилиты who для формата даты: «% Y-% m-% d% H:% M» [LC_TIME] - PullRequest
2 голосов
/ 13 января 2012

Как заставить базовую утилиту 'who' использовать формат даты "% Y-% m-% d% H:% M"?Я пытался изменить мой LANG, LC_ALL, LC_TIME, но ни один из них не дал требуемого результата.Мне удалось заставить его работать с помощью следующей команды: env -i ssh me @ remotemachine 'who -s'

Ну, в этом случае SSH не отправлял мои переменные LANG и LC_ * на удаленную машину.

Давайте посмотрим на исходный код утилиты who:

if (hard_locale (LC_TIME))
    {
      time_format = "%Y-%m-%d %H:%M";
      time_format_width = 4 + 1 + 2 + 1 + 2 + 1 + 2 + 1 + 2;
    }
  else
    {
      time_format = "%b %e %H:%M";
      time_format_width = 3 + 1 + 2 + 1 + 2 + 1 + 2;
    }

Что ж, мне нужно это на Linux и Mac OS X (BSD), но «who» ведет себя одинаково на обоих,Код hard_locale () находится прямо здесь: http://opensource.apple.com/source/text_cmds/text_cmds-81/sort/hard-locale.c

Он проверяет LC_TIME и, если это "C" или "POSIX", это не сложно найти, в этом случае он не может использовать любую локаль.

Настройка:

export LANG=en_US.UTF-8 
export LC_TIME=en_US.UTF-8 
export LC_ALL=en_US.UTF-8 

Не изменяет формат даты при выводе «кто».

Еще одно интересное наблюдение:

# 2012-01-13 13:56 is used on remote machine (en_US.UTF-8)
# Now let's do this:
# env -i ssh me@remotemachine 'who -s'
# Jan 13 14:33 is used on remote machine

Есть идеи?Или, может быть, установка переменных не достаточно?

Спасибо!

...