Как добраться в предыдущем году и в предыдущем месяце в solaris 8

Почти я могу сказать от рассмотрения текущих источников ядра Linux, все ядро делает, проводят подсчет того, сколько ссылок это сопровождается, и это ошибки, если это больше, чем некоторое число. Посмотрите строку 1330 в namei.c для комментария, и nested_symlink() функция. Макрос ELOOP (код ошибки, возвращенный из a read(2) системный вызов этой ситуации), обнаруживается во многих местах в том файле, таким образом, это не может быть столь просто, как, считая ссылки сопровождаемыми, но это уверено, на что это похоже.

Существует много алгоритмов для нахождения "циклов" в связанных списках (алгоритм обнаружения цикла Floyd) или в ориентированных графах. Это не ясно мне, какой необходимо было бы сделать для обнаружения фактического "цикла" или "цикла" в конкретном пути. В любом случае алгоритмы могли занять много времени для выполнения, таким образом, я предполагаю, что просто подсчет количества перешедших символьных ссылок получает Вас 90% пути к Вашей цели.

3
05.06.2014, 01:33
3 ответа

Solaris date не поддерживает параметр -d , такой как GNU date .

Вы можете использовать perl :

$ perl -MPOSIX=strftime -le '@t = localtime; $t[3] = 1; $t[4]--; print strftime("%m", @t)'
05    
$ perl -MPOSIX=strftime -le '@t = localtime; $t[3] = 1; $t[5]--; print strftime("%Y", @t)'
2013

Или, если у вас есть ksh93 :

$ printf "%(%m)T\n" "last month"
05  
$ printf "%(%Y)T\n" "last year"
2013

Обновлено

Для комментария @ glennjackman я нашел документацию в Time Модуль :: Piece :

   The months and years can be negative for subtractions. Note that there is some "strange" behaviour when adding and subtracting months
   at the ends of months. Generally when the resulting month is shorter than the starting month then the number of overlap days is
   added. For example subtracting a month from 2008-03-31 will not result in 2008-02-31 as this is an impossible date. Instead you will
   get 2008-03-02. This appears to be consistent with other date manipulation tools.

Поскольку OP хочет получить только предыдущий год и месяц, мы можем установить $ t [3] = 1 , чтобы решить эту проблему.

2
27.01.2020, 21:23

Tcl имеет действительно хорошую реализацию даты и времени, если она у вас установлена:

tclsh <<END
puts [clock format [clock scan "-1 month"] -format "%m"]
puts [clock format [clock scan "-1 year"] -format "%Y"]
END
0
27.01.2020, 21:23

Корректировка идеи perl (Есть проблема с этим решением в январе, да?).

Последний месяц:

$ perl -MPOSIX=strftime -le '@t = localtime; @l = localtime (time - @t[3] * 86400); print strftime("%m", @l)'
1
27.01.2020, 21:23

Теги

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