Мне никогда не нравилось решение TMOUT. Во-первых, потому что это работает только в том случае, если вы покидаете сеанс по подсказке; если вы оставите его внутри Vim или даже в запросе пароля sudo, время ожидания не истечет. А во-вторых, я не хочу, чтобы сессия была закрыта, я хочу, чтобы она была заблокирована, как это делают графические среды.
Экран GNU может блокироваться после периода бездействия, поэтому я сделал следующее. В самом начале моего ~/.bashrc
я добавил это:
if [ "$TERM" = "linux" ] && tty | egrep -q '^/dev/tty[[:digit:]]+$'
then
exec screen -c ~/.ttyscreenrc
fi
exec
важен, потому что он гарантирует, что screen
заменит Bash, и когда он завершится, сеанс TTY будет закрыт.
И в ~/.ttyscreenrc
я поместил это:
startup_message off
idle 180 lockscreen
Чтобы пропустить экран приветствия и заблокировать экран через 3 минуты бездействия.
Предположим, что ваш исходный файл — data
, а ваш файл обновлений — updates
, этот короткий код удовлетворит ваше требование
awk '{ h[$1] = $0 } END { for (i in h) { print h[i] } }' data updates
awk
код разбит на строфы:
{ h[$1] = $0 } # save each line, keyed by first element, overwriting as necessary
END { for (i in h) { print h[i] } } # when we have read everything, print each element in the array