Вместо изменения umask
вы можете использовать параметр usergroups
для pam_umask
, с этот пользователь и группа имеют те же разрешения, что и классический способ unix для совместного использования папок.
# /etc/pam.d/login or
# /etc/pam.d/common-session or system-auth
session optional pam_umask.so usergroups
с помощью bash вы можете сделать что-то вроде кода ниже :
Обратите внимание, что вам нужно будет использовать sed
или что-то еще, чтобы переформатировать строку даты во что-то, что date
примет, например:
"2017-05-13 15:44:20"
#!/usr/bin/env bash
last_run="2017-05-13 15:44:20"
function relative() {
local last_unix="$(date --date="$1" +%s)" # convert date to unix timestamp
local now_unix="$(date +'%s')"
local delta=$(( $now_unix - $last_unix ))
if (( $delta < 60 ))
then
echo "last run "$delta" seconds ago"
return
elif ((delta < 2700)) # 45 * 60
then
echo "last run "$(( $delta / 60 ))" minutes ago";
fi
}
relative "$last_run"
Что ж, на языке Perl (из Perl Cookbook)ты бы пошел:
use Date::Calc qw(Delta_DHMS);
@now = ( 1981, 6, 16, 4, 35, 25 ); # 16 June 1981 4:35:25
@then =( 1973, 1, 18, 3, 45, 50 ); # 18 January 1973 3:45:50
@diff = Delta_DHMS( @then, @now );
print "This is now, then was $diff[0] days, $diff[1]:$diff[2]:$diff[3] ago!\n";
И получить:
This is now, then was 3071 days, 0:49:35 ago!
К сожалению, модуль Date::Calc
не установлен по умолчанию, поэтому вам придется либо попросить кого-нибудь установить его, либо научиться использовать диспетчер модулей Perl CPAN самостоятельно.
Использованиеawk
:
hdate () {
awk -v date="$(date +%s -d "$1")" -v now="$(date +%s)" '
BEGIN { diff = now - date;
if (diff > (24*60*60)) printf "%.0f days ago", diff/(24*60*60);
else if (diff > (60*60)) printf "%.0f hours ago", diff/(60*60);
else if (diff > 60) printf "%.0f minutes ago", diff/60;
else printf "%s seconds ago", diff;
}'
}
Пример:
~$ hdate '2018-06-17 14:22:20'
5 days ago
Дата ввода должна быть в формате, который date
может прочитать.
Надеюсь, у кого-то есть лучшее решение, но вот сценарий, который придумал я:
#!/bin/sh
cd /tmp
git init -q
git -c user.email=0 -c user.name=0 commit -q -m 0 --allow-empty --date="$1"
git show --format=%ar
Результат:
$ relative.sh 2016-1-23
2 years, 5 months ago
$ relative.sh 2016-9-23
1 year, 9 months ago